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__函数。
nums = [i*i for i in range(4)] print(nums) 运行结果: [0,1,4,9]
nums = (i for i in range(4)) print(nums) print(next(nums)) 运行结果: <generator object <genexpr> at 0x000001CDD6860F90> 0
dict1 = {x: '%s'%x for x in range(4)} print(dict1) {0: '0', 1: '1', 2: '2', 3: '3'}
python中创建生成器有以上两种方式,优点代码比较简洁,缺点只能遍历一次。
欢迎对python感兴趣的小伙伴联系我呀~