python 生成器需注意的小问题

 更新时间:2020年09月29日 16:34:03   作者:luoheng  
这篇文章主要介绍了python 生成器需注意的小问题,帮助大家更好的理解和学习python 生成器,感兴趣的朋友可以了解下

在Python中,生成器和函数很像,都是在运行的过程中才会去确定各种变量的值,所以在很多情况下,会导致各种各样的问题。

def generator_test1():
 # 0...9 generator
 x = (i for i in range(10))
 # 5..9 generator
 x_filter = filter(lambda y: y >= 5, x)
 # first use the x
 L = list(x)
 print("L, x", L)
 # then use x_filter
 l = list(x_filter)
 print("l, x_filter", l)
 
 
if __name__ == "__main__":
 generator_test1()

输出结果为:

L, x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l, x_filter []

上述代码中,x_filter是基于生成器x构建的生成器,但是由于x在x_filter使用之前先被用掉了,所以在使用x_filter的时候,才去获取x的值,而此时x已经用完了,最终导致x_filter转化成的列表是空的。

def generator_test2():
 x = (i for i in range(10))
 for i in range(10):
  x = (j + i for j in x)
 L = list(x)
 print("L, x", L)
 
if __name__ == "__main__":
 generator_test2()

输出结果:

L, x [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 

上述代码中,每次循环都基于原先的生成器构建一个新的生成器,由于并未使用,所以生成器x中的i并没有被赋值。在后面转化成列表的时候才去获取i的值,而此时由于i为9,所以所有的生成器x的i都为9,原始的x是0到9的生成器,接下来的10个生成器每个都在原始值上加9,导致每个值都增大了90。下面是此例的一个变体:

def generator_test3():
 x = (i for i in range(10))
 for i in range(10):
  x = (j + i for j in x)
 i = 20
 L = list(x)
 print("L, x", L)
 
if __name__ == "__main__":
 generator_test3()

输出结果:

L, x [200, 201, 202, 203, 204, 205, 206, 207, 208, 209]

以上就是python 生成器需注意的小问题的详细内容,更多关于python 生成器的资料请关注脚本之家其它相关文章!

相关文章

  • Numpy中的ravel_multi_index函数用法说明

    Numpy中的ravel_multi_index函数用法说明

    这篇文章主要介绍了Numpy中的ravel_multi_index函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • python 中open文件路径的选择问题解析

    python 中open文件路径的选择问题解析

    这篇文章主要介绍了python 中open文件路径的选择问题解析,本文给大家分享完美解决方法,需要的朋友可以参考下
    2021-07-07
  • python怎样判断一个数值(字符串)为整数

    python怎样判断一个数值(字符串)为整数

    这篇文章主要介绍了python怎样判断一个数值(字符串)为整数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python密码学换位密码及换位解密转置加密教程

    python密码学换位密码及换位解密转置加密教程

    这篇文章主要为大家介绍了python密码学换位密码及换位解密转置加密教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Pycharm 设置默认头的图文教程

    Pycharm 设置默认头的图文教程

    今天小编就为大家分享一篇Pycharm 设置默认头的图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python中jieba模块的深入了解

    python中jieba模块的深入了解

    这篇文章主要介绍了python中jieba模块的深入了解,jieba模块是一个python第三方中文分词模块,可以用于将语句中的中文词语分离出来
    2022-06-06
  • Python 多线程之threading 模块的使用

    Python 多线程之threading 模块的使用

    这篇文章主要介绍了Python 多线程之threading 模块的使用,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • python 实现二维数组的索引、删除、拼接操作

    python 实现二维数组的索引、删除、拼接操作

    这篇文章主要介绍了python 实现二维数组的索引、删除、拼接操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Python使用百度api做人脸对比的方法

    Python使用百度api做人脸对比的方法

    今天小编就为大家分享一篇Python使用百度api做人脸对比的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python中列表与元组的乘法操作示例

    Python中列表与元组的乘法操作示例

    这篇文章主要介绍了Python中列表与元组的乘法操作,结合简单实例形式分析了Python中列表、元组的乘法,并附带分析了字符串的乘法及元组乘法操作的注意事项,需要的朋友可以参考下
    2018-02-02

最新评论