魔法方法需要特定的条件去触发

有next是迭代器

# li = []

# for i in range(1,10):

# li.append(i)

# print(li)

# --------------------------------------

# li = [i for i in range(1,10)] #必须掌握

# print(li)

# -----------------------------------------

#列表推导 + 条件判断 (必须掌握)

# li2 = [i*10 for i in range(1,10) if i%2 ==0]

# print(li2)

# --------------------------------------------

#列表推导+三目运算符 (必须掌握)

# li3 = [i*100 if i%3 ==0 else i*10 for i in range(1,10) ]

# print(li3)

# --------------------------------------------

#集合推导

# se = {i for i in range(1,10)}

# print(se)

# ---------------------------------------

#字典推导

a = [1,2,3,4,5,6,7]

# b = enumerate(a)#这个函数是什么意思

# di = {i:j for i,j in enumerate(a)}

# print(di)

迭代:

每一次循环都会自动让“迭代变量”指向“下一个元素”

the_list = [5,4,3,2,1,]

for index in the_list:

print(index)

var = None

index = 0

while index < len(the_list):

var = the_list[index]

print(var)

index +=1

迭代器:

生成迭代器的方法:

1, iterator = iter(li)

2, iterator = li.__iter__()

02, 迭代器对象本身需要支持以下两种方法,他们一起构成迭代器协议:

iterator.__iter__()     (使用dir查看只有这个的是可迭代对象)

iterator.__next__()   (使用dir查看有这个的是迭代器)

取值:

next(iterator)

iterator.__next__()

注意: 如果迭代器取值完之后,会返回Stoplteration错误

从可迭代对象生成一个迭代器:

迭代器 = iter(可迭代对象)

下个值 = next(迭代器)

for实现原理:

li4 = [1,2,3,4,5,6,7,8,9,10]

it = iter(li4)#首先将一个对象变成可迭代类型

while True:

try:

var = next(it)    #一个一个取值

print(var)

except StopIteration:   #直到没有值,就跳出循环

break

自定义迭代器(掌握原理):

class Testlter:

def __init__(self,li):

self.li = li

self.index = 0

def __iter__(self):

return self

def __next__(self):

if self.index < len(self.li):

index  = self.li[self.index]

self.index += 1

return index

else:

raise StopIteration

简单原理记忆:

首先定义init来传入参数

然后必须用iter来生成迭代器

然后要有next来返回当前运行到哪个index了

next里超出len以后就抛出异常

生成器:

方法一:列表推导式的[]改成()

b = (x for x in range(10))

print(next(b))

print(next(b))

print(next(b))

方法二:在函数里面加上yield

def func(num):

a = 0

while a

yield a

a +=1

ge = func(10)

print(next(ge))

print(next(ge))

print(next(ge))

print(next(ge))

生成器不会一下子把所有内容生成出来,在我们需要的时候用next()去生成,可以节省内存空间

yield运行规则

注意:

yield表达式只能在函数中使用

yield表达式可以使函数成为一个生成器

yield可以返回表达式结果,并且暂停函数执行,直到next激活下一个yield

简单理解生成器就是一个迭代器

python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果,从而节省了大量空间,这

也是生成器的主要好处。

模块:

在python中,模块就是一个py文件,可以使用下面两种方法导入

import datetime

from datetime import datetime (as dm)

在同一目录下,可直接使用上面两种方法导入

在不同目录下,需要使用sys.path添加路径

sys.path.append('path')

在python3中导入后,在当前路径下会生成一个__pycache__文件夹

斐波那契:

def feibonaqi(i,n):

i1 = 0

i2 = i

count = 0

while True:

if count < n:

count +=1

b = i1+i2

i1 = i2

i2 = b

yield b

else:

break

import feibo

aa = feibo.feibonaqi(1,20)

print(next(aa))

print(next(aa))

print(next(aa))

print(next(aa))

print(next(aa))

print(next(aa))

# li = []

# for i in range(1,10):

# li.append(i)

# print(li)

# --------------------------------------

# li = [i for i in range(1,10)] #必须掌握

# print(li)

# -----------------------------------------

#列表推导 + 条件判断 (必须掌握)

# li2 = [i*10 for i in range(1,10) if i%2 ==0]

# print(li2)

# --------------------------------------------

#列表推导+三目运算符 (必须掌握)

# li3 = [i*100 if i%3 ==0 else i*10 for i in range(1,10) ]

# print(li3)

# --------------------------------------------

#集合推导

# se = {i for i in range(1,10)}

# print(se)

# ---------------------------------------

#字典推导

a = [1,2,3,4,5,6,7]

# b = enumerate(a)#这个函数是什么意思

# di = {i:j for i,j in enumerate(a)}

# print(di)

# -------------------------------------

# the_list = [5,4,3,2,1,]

# for index in the_list:

# print(index)

#

# var = None

# index = 0

# while index < len(the_list):

# var = the_list[index]

# print(var)

# index +=1

#for 实现原理:

# li4 = [1,2,3,4,5,6,7,8,9,10]

# it = iter(li4)#首先将一个对象变成可迭代类型

# while True:

# try:

# var = next(it)#

# print(var)

# except StopIteration:

# break

# 自定义迭代器:

# class Testlter:

# def __init__(self,li):

# self.li = li

# self.index = 0

# def __iter__(self):

# return self

# def __next__(self):

# if self.index < len(self.li):

# index = self.li[self.index]

# self.index += 1

# return index

# else:

# raise StopIteration

#生成器 1, 列表推导式的[]改成 ()

# b = (x for x in range(10))

# print(next(b))

# print(next(b))

# print(next(b))

# 2,在函数里加上yield

# def func(num):

# a = 0

# while a

# yield a

# a +=1

# ge = func(10)

# print(next(ge))

# print(next(ge))

# print(next(ge))

# print(next(ge))

import feibo

aa = feibo.feibonaqi(1,20)

print(next(aa))

print(next(aa))

print(next(aa))

print(next(aa))

print(next(aa))

print(next(aa))

python中raise stoplteration_推导表达式迭代器生成器模块和包 | 编程电脑技术交流...相关推荐

  1. Python 中的黑暗角落(三):模块与包

    如果你用过 Python,那么你一定用过 import 关键字加载过各式各样的模块.但你是否熟悉 Python 中的模块与包的概念呢?或者,以下几个问题,你是否有明确的答案? 什么是模块?什么又是包? ...

  2. python中raise和raise e区别_python raise和assert的区别

    python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...

  3. Python 中的列表推导式

    Python 中的列表推导式 简单用法 添加多个条件 多个列表使用 替换 Reduce 和 Lambda 嵌套列表推导式 列表推导式是一种 Python 构造,可减少生成新列表或过滤现有列表所需的代码 ...

  4. Python中eval函数的表达式如何使用

    这篇文章主要介绍了Python中eval函数的表达式用法示例,文中通过示例对比来为大家进行详细的讲解,有需要的朋友可以借鉴参下,希望有所帮助 eval 是干嘛的? 解析字符串表达式并执行,并返回一个值 ...

  5. Python 中 raise 和 raise/from 的区别

    Python 中 raise 和 raise/from 的使用方法 文章目录 Python 中 raise 和 raise/from 的使用方法 0. 参考资料 1. 代码比较 2. 用法解释 2.1 ...

  6. 在python中调用js或者nodejs要使用PyExecJs第三方包。

    在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...

  7. Python中的装饰器、迭代器、生成器、推导式、匿名函数和高阶函数

    文章目录 装饰器 迭代器 生成器 推导式 匿名函数 高阶函数 装饰器 闭包 介绍装饰器前先了解一下闭包,在Python中,一切皆对象(Object),函数(Function)也不例外,也是一个普通的对 ...

  8. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】...

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

  9. python中raise stoplteration_Python迭代器

    本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢. 声明: 本博客欢迎转发,但请保留原作者信息! 新浪微博:@iuskye; Github:@iuskye ...

最新文章

  1. webservice 接口练习
  2. redis源码剖析(六)—— Redis 数据库、键过期的实现
  3. 链表应用 多项式相加
  4. 前后落差大用什么词语_语文考题一共有五类:汉字类、词语类、句子类、阅读类、作文类,如果基础扎实,答题技巧弄懂了,哪一类都能拿高分!...
  5. 整型与布尔型的转换(信息学奥赛一本通-T1022)
  6. Opencv--IplImage访问图像像素的值
  7. OpenShift 4 - 下载OpenShift项目中的ImageStream
  8. 训练作用_感觉统合是什么意思,感觉统合训练有什么作用
  9. 养老院管理系统如何开发详解
  10. jQuery or YUI3 ?
  11. Windows 写入缓存
  12. Apollo选型及优势介绍
  13. 2022-2027年中国股权众筹行业市场调研及未来发展趋势预测报告
  14. 法国数学到底有多厉害?
  15. nats断链情况总结
  16. vscode下载太慢,快速下载vscode方法!
  17. matlab diff函数
  18. C语言strlen等系列函数详细总结
  19. matlab多径信道模型,多径时变信道模型的仿真与性能分析课程设计(样例3)
  20. android移动支付——银联支付

热门文章

  1. 让自己的程序支持livewriter
  2. ios unrecognized selector sent to instance出现的原因和解决方案
  3. python下使用qrcode方法
  4. asp 把大图缩小显示的JS
  5. 每天学一点flash (20) flash cs3.0 外部加载图片
  6. java遍历查询的某一列_【jQuery:遍历相同class的所有值,遍历某一列td的值】
  7. 世界人口钟实时数据_用数字孪生重新定义智慧城市,美象VR推出MxDATA智慧城市CIM数据可视化平台...
  8. python信号与槽_Python信号和插槽(1),python,与,一
  9. C语言playsoundw函数,使用inline hook实现修改PC微信通知铃声-哥哥微信来了
  10. 公共端接正极还是负极_【动力电池大事记】现代摩比斯启动首批模组工厂,松下拟挪威建厂,200名车主起诉现代,密歇根大学开发锂金属固态电池及“无负极”工艺...