python——函数之生成器

1 生成器函数的含义

    生成器是一个返回能够迭代对象的函数,它是一个特殊的迭代器,但迭代器的抽象层级更高且比较复杂须要实现不少方法。相较迭代器而言,生成器简单使用。函数

2 生成器的建立方式

  2.1 生成器表达式

    把列表推导式的[] 修改成(),spa

(i for i in range(1, 10000) if i % 2 == 0)

  代码执行界面以下:3d

    

  2.2 生成器函数code

    (1)在一个通常函数中使用yield关键字,能够实现一个最简单的生成器,此时这个函数变成一个生成器函数。简单来讲,生成器函数就是函数对象

    中包含 yield语句的函数。blog

        yield语法:yield [返回值]     ([] 表示可选参数)io

        yield的做用:yield能够去阻断当前的函数执行。当使用next()(或.__next__())函数,会让函数继续执行,yield后面的值做为next()函数class

      返回值,当执行到下一个 yeild时,又会被暂停挂起。遍历

        yield与return的区别:yield会保存当前函数的执行状态,在返回后,函数又回到以前保存的状态继续执行;而return返回后,函数yield

      状态终止。
    (2)代码实例

 1 def mylist():
 2     for i in range(3):
 3         print("列表的第%s个元素:" % i, end="")
 4         yield i
 5 
 6 
 7 ml = mylist()              # 建立一个生成器
 8 print(next(ml))
 9 print(next(ml))
10 print(next(ml))
11 print(next(ml))            # 当生成器遍历完后,再遍历就会报错

 

     代码执行顺序示意图:

      

 

3 生成器的遍历

  3.1 next()或.__next__()遍历,代码以下 

  

 1 # 方式1
 2 ml = (i for i in range(1, 10) if i % 2 == 0)
 3 print("next()方式遍历结果:", end="")
 4 print(ml.__next__(), end=" ,")
 5 print(ml.__next__(), end=" ,")
 6 print(ml.__next__(), end=" ,")
 7 print(ml.__next__())
 8 
 9 # 方式2
10 ml2 = (i for i in range(1, 10) if i % 2 == 0)
11 print(".__next__()方式遍历结果:", end="")
12 print(next(ml2), end=" ,")                  # next()至关于 生成器.__next__()
13 print(next(ml2), end=" ,")
14 print(next(ml2), end=" ,")
15 print(next(ml2))

  上面代码执行结果以下:
  

 

  3.2 for in方式遍历,代码以下,

1 ml = (i for i in range(1, 10) if i % 2 == 0)
2 print("for in 遍历结果为;", end=" ")
3 for i in ml:
4     print(i, end=", ")

   上面代码执行结果为:

    


4 关闭生成器
  命令:生成器名称.close()  ,例如 ml.close()。

  注意:生成器只会遍历一次,当关闭生成器或者遍历一遍后,后续若是再调用,会抛出StopIteration异常提示。下次若是想继续从新遍历,必须先从新建立生成器。

相关文章
相关标签/搜索