python yield和Generator函数用法详解
作者:郭雪原 时间:2022-12-21 04:18:47
这篇文章主要介绍了python yield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先我们从一个小程序导入,各定一个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语句。
来源:https://www.cnblogs.com/guoxueyuan/p/6514774.html
标签:python,yield,Generator,函数
0
投稿
猜你喜欢
MySQL性能优化神器Explain的基本使用分析
2024-01-19 21:56:15
python常见读取语音的3种方法速度对比
2021-03-08 11:12:33
Go素数筛选分析详解
2023-07-22 11:50:02
Matlab常用的输出命令disp与fprintf解读
2022-03-18 17:13:58
python+OpenCV实现图像拼接
2023-01-28 08:09:26
SQL语句删除2条重复数据一条保留一条
2012-07-11 15:51:44
Vue3中简单实现动态添加路由
2023-07-02 16:58:45
Vue.extend实现组件库message组件示例详解
2024-05-09 15:09:26
Pytorch之扩充tensor的操作
2023-10-09 01:41:59
前端模板引擎
2010-07-27 12:33:00
Python数据分析 Numpy 的使用方法
2023-01-14 15:12:36
MySQL存储IP地址的方法
2024-01-23 06:01:02
Python如何将给定字符串中的大写英文字母按以下对应规则替换
2021-04-23 13:47:48
Oracle新建用户、角色,授权,建表空间的sql语句
2012-07-11 15:39:24
简单介绍Ruby中的CGI编程
2022-09-07 21:38:14
CSS绝对定位在宽屏分辨率下错位
2009-07-28 12:24:00
sql中 RecordCount=-1问题
2008-03-02 17:18:00
Python 恐龙跑跑小游戏实现流程
2021-10-23 19:42:59
教你如何使用MySQL8递归的方法
2024-01-28 22:59:12
如何使用PyCharm将代码上传到GitHub上(图文详解)
2021-02-18 05:13:31