Python基础篇之生成器
python中的生成器平时用的较少,这也跟我的工作性质不无关系,今天记录下生成器的几种用法,督促自己在技术上不至于落后太多。
生成器,是一个用来创建迭代器的工具,简答而又强大。下面看看生成器的几种用法。
生成器函数
主要使用yield语句,每个yield 会临时暂停处理,记住当前位置执行状态(包括局部变量和挂起的 try 语句)。当该生成器恢复时,它会从离开位置继续执行(这与每次调用都从新开始的普通函数差别很大)
例:
def genNum(n):
print("生成数字:")
for i in range(n):
yield i
print("继续执行")
nums = genNum(4)
print(next(nums))
for num in nums:
print(num)
运行结果:
生成数字:
0
继续执行
1
继续执行
2
继续执行
3
继续执行
上述例子中,genNum本质生成了__next__函数,因此,在使用next()函数时会调用__next__,输出0,并停止在此处,下面调用for迭代,本质也是使用了__next__函数。
生成器表达式
在列表list中使用生成器表达式
nums = [i*i for i in range(4)]
print(nums)
运行结果:
[0,1,4,9]
在元组tuple中使用生成器表达式
nums = (i for i in range(4))
print(nums)
print(next(nums))
运行结果:
<generator object <genexpr> at 0x000001CDD6860F90>
0
在字典dict中使用生成器表达式
dict1 = {x: '%s'%x for x in range(4)}
print(dict1)
{0: '0', 1: '1', 2: '2', 3: '3'}
总结
python中创建生成器有以上两种方式,优点代码比较简洁,缺点只能遍历一次。