首页 > 编程语言 >python-迭代器与生成器

python-迭代器与生成器

时间:2022-11-04 11:03:53浏览次数:46  
标签:__ 迭代 python self 生成器 iter next print


  1. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
  2. 迭代器有两个基本的方法:iter() 和 next()。
  3. 字符串,列表或元组对象都可用于创建迭代器

eg:

list = [1,2,3,4]

it = iter(list)
print(next(it))

python-迭代器与生成器_迭代


如果继续print:

print(next(it))

python-迭代器与生成器_迭代_02

迭代器对象可以使用常规for语句进行遍历:
#!/usr/bin/python3

list=[1,2,3,4]
it = iter(list)
for x in it:
print (x, end=" ")

python-迭代器与生成器_迭代_03


也可以使用 next() 函数:

import sys 

list = [1, 2, 3, 4]
it = iter(list)

while True:
try:
print(next(it),end = " ")
except StopIteration:
sys.exit()

注:sys.exit([arg]): 程序中间的退出,arg=0为正常退出

创建一个迭代器

创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

class MyNumbers:
def __iter__(self):
self.a = 1
return self

def __next__(self):
x = self.a
self.a += 1
return x


myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

看运行结果:

python-迭代器与生成器_迭代_04

StopIteration

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代

eg:
在 20 次迭代后停止执行:

class MyNumbers:
def __iter__(self):
self.a = 1
return self

def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration

myclass = MyNumbers()
myiter = iter(myclass)

for x in myiter:
print(x,end=" ")

运行结果:

python-迭代器与生成器_生成器_05

生成器

  1. 在 Python 中,使用了 yield 的函数被称为生成器(generator)。
  2. 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作
  3. 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行
  4. 调用一个生成器函数,返回的是一个迭代器对象。

eg:
以下实例使用 yield 实现斐波那契数列:

import sys

def fibonacci(n):
a,b,c = 0,1,0
while True:
if c > n :
return
yield a
a,b = b ,a + b
c += 1

f = fibonacci(10)

while True:
try:
print(next(f),end=" ")
except StopIteration:
sys.exit()


标签:__,迭代,python,self,生成器,iter,next,print
From: https://blog.51cto.com/u_15861560/5822296

相关文章

  • python-求三角形的面积
    计算三角形的面积法一:#计算三角形的面积a=float(input('输入三角形第一边长:'))b=float(input('输入三角形第二边长:'))c=float(input('输入三角形第三边长:'))whilea......
  • python-当字符串为空则抛出异常
    今天有一个需求,判断字符串是否为空,为空则抛出异常python的异常有个大基类,承的是Exception。所以我们自定义类也必须继承Exception#最简单的自定义异常classFError(Exceptio......
  • Python-SMTP发送邮件
    之前学习过SMTP(SimpleMailTransferProtocol,知道是简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很......
  • python-二次方程
    导入cmath模块,计算复杂数学运算eg:我们计算二次方程式ax**2+bx+c=0代码如下:importcmatha=float(input('输入a:'))b=float(input('输入b:'))c=float(in......
  • Python yield 使用浅析
    之前了解了生成器的概念,带有yield的函数在Python中被称之为generator(生成器),那么应该什么时候使用呢?举个例子:简单输出斐波那契數列前N个数deffab(max):n,a,b=......
  • python之sys模块
    python之sys模块详解之前用过sys模块的一种用法,今天总结一下。sys.argv功能:在外部向程序内部传递参数eg:#!/usr/bin/envpythonimportsysprint(sys.argv[0])print(sys.arg......
  • python画图 去除横纵坐标值;设置横纵坐标名称;设置坐标轴刻度大小
    1.去除横纵坐标值plt.xticks([])#去掉横坐标值plt.yticks([])#去掉纵坐标值2.设置横纵坐标名称ax1.set_xlabel('Outputclass',fontsize=24)#设置x轴名称a......
  • python 中将单条scaffold的碱基序列按照指定数目输出
      001\[root@pc1test3]#cata.fa>chr1cccccggggggggttttggcccgggggg>chr2uuuuutttttNNNNNddffffdddgggggggggggcccccccccc[root@pc1test3]#cattest.py#......
  • Python函数参数中的 : 以及 ->
    一些python函数中,参数后面有冒号,函数后面还有箭头,这是什么含义呢?函数参数中的冒号是参数的类型建议符,告诉函数调用者希望传入的实参的类型。函数后面跟着的箭头是函数返回......
  • ipython 的感叹号、问号的使用
    目录使用感叹号!运行Shell命令使用一个感叹号!运行赋值编码使用两个感叹号!!运行编码赋值注意使用问号?获取帮助使用一个问号?使用两个问号??使用*做模糊查询......