自从PEP 255引入以来,生成器就一直是python的重要组成部分。

python中的Generator是一种特殊的例程,可用于控制循环的迭代行为。生成器类似于返回数组的函数。生成器具有参数,我们可以调用它并生成数字序列。但是,与返回整个数组的函数不同,生成器一次只需要一个值,而占用的内存更少。

任何带有关键字“ yield”的python函数都可以称为生成器。普通的python函数从第一行开始执行,一直持续到返回return语句,异常或函数结束为止,但是,在函数作用域内创建的任何局部变量都将被破坏并且无法进一步访问。在生成器遇到yield关键字的情况下,函数的状态被冻结,所有变量都存储在内存中,直到再次调用生成器为止。

我们可以根据迭代器使用generator,也可以使用“ next”关键字显式调用它。

通常是Python中的生成器:用def关键字定义

使用yield关键字

可能包含几个yield关键字。

返回一个迭代器。

带有迭代器的生成器def generator_thr_iter():

yield 'xyz'

yield 246

yield 40.50

for i in generator_thr_iter():

print(i)

输出结果xyz

246

40.5

发电机使用下一个def generator_thr_iter():

yield 'xyz'

yield 246

yield 40.50

>>> g = generator_thr_iter()

>>> g.__next__()

'xyz'

>>> g.__next__()

246

>>> g.__next__()

40.5

>>> g.__next__()

Traceback (most recent call last):

File "", line 1, in

g.__next__()

StopIteration

我们可以将生成器想象为一个生成器,一个生成器一个一个地返回多个项,而不是一次返回所有项,并且生成器功能被暂停直到请求下一个生成项。

程序打印从1到n的数字平方

考虑一下,我们要计算从1到n的数字的平方,其中n确实是一个大数字,这样创建一个最多为'n'的数字列表将占用整个系统内存空间。

没有生成器,我们的方法将类似于->>> n= 200000000000

>>> number_list = range(1, n+1)

>>> for i in number_list:

print(i*i)

上述方法将消耗大量系统内存。更好的方法是在不创建数字列表的情况下遍历数字,以免占用系统内存。这是发电机的使用。

我们的生成器程序将是-def num_generator(n):

num =1

while True:

yield num

if num == n:

return

else:

num += 1

for i in num_generator(200000000000):

print (i*i)

因此,在上述方法中,当首次初始化for循环时,将调用num_generator并将n = 200000000000的值存储在内存中,并且将num = 1初始化并输入到永久循环的while循环中。然后遇到yield num,这时while循环被冻结,所有局部变量都存储在内存中。由于num = 1,yield num返回到for循环并分配给I,在此打印1(i * i)并进行对num_generator的下一次调用。

现在,执行从先前冻结的点开始,因此它执行了num == n(1 == 200000000000)行,这是错误的,因此执行了num + = 1,从而得出num = 2,而while循环为再次执行,过程继续。

最后,在执行循环直到n = 200000000000时,当产生200000000000时,将执行下一行'num == n'(200000000000 == 200000000000),因为确实如此,将执行return语句。

因此,当生成器执行return语句或遇到异常或到达生成器的末尾时,将引发“ StopIteration”异常,并且for循环迭代此刻停止。因此,在上面,我们能够打印最大为200000000000的数字的平方,而无需创建大量的数字,而这些数字本来会占用大量的系统内存。

考虑以上情况,我们可以在日常编程实践中使用生成器来创建更高效的程序。

python中用于生成数字序列的函数_Python中的生成器?相关推荐

  1. 生成随机小数的函数python_哪个选项是random库中用于生成随机小数的函数?

    [其它]一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数.试编写代码输出该整数. 要求(1)粘贴代码图片(图片需包括行号),代码不可超过6行(争取4行); (2)粘贴结果图片, ...

  2. python中保留两位小数的函数_python中round函数保留两位小数的方法

    在我们日常计算的过程中,如果计算出小数,对大量的被保留数据,采用四舍五入这种保留法的误差总和是最小的,能使被保留部分的与实际值差值不超过最后一位数量级的二分之一.四舍五入是一种精确度的保留法,是我们使 ...

  3. python字符串三种常用的方法或函数_python中字符串常用的函数

    s ="hello world" s[2] >>> "l" 索引 s.index("l") >>> 2 ...

  4. python如何定义带有可选参数的函数_python中如何正确调用带可选参数的函数

    我是python的初学者,遇到了一个需要可选参数的函数的问题. 此函数获取可变数量的文件路径作为参数,可以是2到n个参数. 之后,一定数量的可选参数可以传递给这个函数. 我试过做这样的事:def co ...

  5. python中如何将数字改成字符串_python中如何将数字转字符串

    python数字转字符串的实现方法:1.使用格式化字符串,语句如"tt=322 tem='%d' %tt":2.通过"str(5)"方法实现转换. 数字转成字符 ...

  6. php用于字符串函数是,php中用于查找字符串的常用函数

    php中用于查找字符串的常用函数,包括strstr.stristr.strpos.substr等,本文主要为大家介绍strstr的使用,感兴趣的朋友不妨参考下. 一.strstr  查找字符串的首次出 ...

  7. python中用于生成随机数的函数的简单总结

    在python中有一个模块叫random,可以提供随机函数,方便生成随机元素或者表数据,对于工作的效率提升有大的帮助. 函数①random.random(): 解释:用于生成0-1之间的随机浮点数. ...

  8. python返回绝对值的函数_Python中用于返回绝对值的abs()方法

    Python中用于返回绝对值的abs()方法 方法abs() 返回x的绝对值,-x-零之间的(正极)的距离. 语法 以下是abs()方法的语法: abs( x ) 参数 x -- 这是一个数值表达式 ...

  9. python中用于获取用户输入的函数是_在Python中,用于获取用户输入的函数是.

    在Python中,用于获取用户输入的函数是. 答:input() 关于新生儿生理性体重下降的恢复时间,下列正确的是出生后 答:7~10天 中国大学MOOC: 未来城市只有同时具备下列哪几个组成部分,才 ...

最新文章

  1. CentOS 7 内存压力测试-memtester工具
  2. 开源PCRF、PCRF体验与PCRF实现
  3. Maximum Xor Secondary CodeForces - 281D (单调栈)
  4. 那篇让汤普金斯进入梦境的相对论演讲
  5. 浅述 Docker 的容器编排
  6. java移动元素_如何通过箭头键连续/平滑地移动元素?
  7. 敏捷开发团队管理系列之四:程序与测试团队III
  8. 疯狂连连看之开发游戏界面组件
  9. 【渝粤教育】国家开放大学2018年春季 0706-21T行政管理学导论 参考试题
  10. IE6 某些bug修复
  11. 《WebGL编程指南》学习笔记——3.在Canvas中使用WebGL
  12. BP神经网络预测(python)
  13. 使用动软.net代码生成器生成数据库文档
  14. ViewGroup的LayoutParams理解
  15. springboot 解决 woff2、ttf 跨域无法解析问题
  16. 百寸大屏搭配高清画质,极米NEW Z6X轻松打造沉浸式家庭影院
  17. php完美pdo类封装,PDO类的封装
  18. 【nodejs】c++ addon 官方例子:nodejs调用c++
  19. 2020成电计算机考研
  20. Python学习教程:针对任意多的分隔符拆分字符串

热门文章

  1. 【Java】Java 线程池 8 大拒绝策略
  2. Memcache监控小工具stats命令
  3. 95-110-022-源码-Env-LocalStreamEnvironment
  4. org.postgresql.util.PSQLException: 栏位索引超过许可范围:1,栏位数:0
  5. 20-linux下ElasticSearch.6.2.2集群安装与head、Kibana、X-Pack..插件的配置安装
  6. 我的世界rpg服务器背包位置,我的世界:如何识别MC老玩家?看他背包中有没有这五种道具...
  7. 好文力荐 | MySQL 索引、B+树原理以及建索引的几大原则
  8. 记一道简单的Java面试题,但答错率很高!
  9. 合并柱_重要快讯!辽宁三市“合并获批”重大消息
  10. java-不用辅助变量,两变量直接交换