首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写

import math
def is_Prims(number): if number == 2:
return True
//除2以外的所有偶数都不是素数
elif number % 2 == 0:
return False
//如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以
for cur in range(2,int(math.sqrt(number))+1,2):
if number % cur == 0:
return False
else:
return True def get_Prims(input_list): result_list = list()
for element in input_list:
if is_Prims(element):
result_list.append(element)
return result_list aa = get_Prims([1,2,3,4,5,6,7,8,9])
print (aa)

但如果我们想给定一个数,然后列出比这个数大的所有素数呢?我们可能这样写:

def get_Prims(number):
if is_Prims(number):
return number

但是一旦return函数将控制权交给调用者后彻底结束,任何局部变量和函数工作都被丢弃,下一次调用又会从头开始。因此我们就可以用一下写法:

def get_Prims(number):
while(True):
if is_Prims(number):
yield number
number += 1 def get_numbers():
total = list()
for next_prim in get_Prims(2):
if next_prim < 100:
total.append(next_prim)
else:
print(total)
return get_numbers()

下面解释一下generator函数,一个函数的def代码里包含了yield,函数就自动成为了一个generator函数(及时仍包含有return),generator函数创建generator(一种特殊形式的迭代器,这个迭代器有一个内置__next__()方法),当需要一个值的时候通过yield来产生而不是直接return,因此与一般函数不同的是,此时控制权并未交出。

for循环会隐式的调用next()函数,next()函数负责调用generator中的__next__()方法,此时generator负责返回一个值给任何调用next()的方法,利用yield将此值传回去,相当于return语句。

参考:http://article.yeeyan.org/view/75219/422747

最新文章

  1. Date.parse
  2. Python装饰器详解
  3. 【bzoj1433】 ZJOI2009—假期的宿舍
  4. http请求过程
  5. 微信支付PHP SDK —— 公众号支付代码详解
  6. MongoDB项目中常用方法
  7. Oracle- 备份单表结构和单表数据
  8. poj1274 匈牙利算法 二分图最大匹配
  9. 使用Reveal.app调试整个项目UI时间,增加LD指令 -Objc引起项目中多个静态库冲突问题
  10. (HYSBZ)BZOJ 1588 营业额统计
  11. Linux学习之挂载
  12. 让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET
  13. sqlserver2012 密码过期问题
  14. Python随笔--爬虫(下载妹子图片)
  15. LAB8 android
  16. Java-Socket实现文件的断点续传
  17. log4j打印堆栈信息
  18. python渗透
  19. centos7 下安装配置python3.6
  20. Sql Server 关于列名带中括号&quot;[]&quot;的问题

热门文章

  1. IDEA Java/Scala混合项目maven打包
  2. java中finalkeyword
  3. JAVA Timer定时器使用方法
  4. vscode 插件安装以及首选项配置
  5. SWIM接口及STM8烧录过程
  6. 面向对象基础——String类
  7. Bullet Physics OpenGL 刚体应用程序模板 Rigid Simulation in Bullet
  8. sanic官方文档解析之Example(二)
  9. FireMonkey下的WndProc实现
  10. 怎样解决 no jzmq in java.library.path