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 生成器的资料请关注脚本之家其它相关文章!

相关文章

  • Python PIL图片添加字体的例子

    Python PIL图片添加字体的例子

    今天小编就为大家分享一篇Python PIL图片添加字体的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 利用PyTorch实现VGG16教程

    利用PyTorch实现VGG16教程

    这篇文章主要介绍了利用PyTorch实现VGG16教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python删除文件夹中具有相同后缀类型文件的实战演练

    python删除文件夹中具有相同后缀类型文件的实战演练

    在平时卸载软件的时候会残留许多文件和空文件夹,下面这篇文章主要给大家介绍了关于python删除文件夹中具有相同后缀类型文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • python中property属性的介绍及其应用详解

    python中property属性的介绍及其应用详解

    这篇文章主要介绍了python中property属性的介绍及其应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)

    pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)

    这篇文章主要介绍了pycharm无法安装第三方库的解决办法以scrapy为例,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • PyTorch-GPU加速实例

    PyTorch-GPU加速实例

    这篇文章主要介绍了PyTorch-GPU加速实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python文件操作实战案例之用户登录

    Python文件操作实战案例之用户登录

    以前只是用c语言文件操作打过用户登入,学了几天的python我感觉我又行了,下面这篇文章主要给大家介绍了关于Python文件操作实战案例之用户登录的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • python实现时间序列自相关图(acf)、偏自相关图(pacf)教程

    python实现时间序列自相关图(acf)、偏自相关图(pacf)教程

    这篇文章主要介绍了python实现时间序列自相关图(acf)、偏自相关图(pacf)教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • django创建最简单HTML页面跳转方法

    django创建最简单HTML页面跳转方法

    今天小编就为大家分享一篇django创建最简单HTML页面跳转方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python中typing模块的具体使用

    Python中typing模块的具体使用

    本文主要介绍了Python中typing模块的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论