最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

python之yield和Generator分析

来源:动视网 责编:小采 时间:2020-11-27 14:25:50
文档

python之yield和Generator分析

python之yield和Generator分析:首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数
推荐度:
导读python之yield和Generator分析:首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数


首先我们从一个小程序导入,各定一个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语句。

更多python之yield和Generator分析相关文章请关注PHP中文网!

文档

python之yield和Generator分析

python之yield和Generator分析:首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写import math def is_Prims(number): if number == 2: return True //除2以外的所有偶数都不是素数 elif number % 2 == 0: return False //如果一个数
推荐度:
标签: 分析 python yield
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top