标签:prim while print += SQ 区别 推导 长度 class
什么是生成器?
可以理解为一种数据类型,这种数据类型自动实现了迭代器协议,所以生成器就是一个可迭代对象。生成器可以说是提供了一种新的模式,那就是可以计算一部分,然后返回计算结果。但是保留了当前状态,下次可在另外一个地方调用它,它会继续按以前状态继续执行下去。这对于数据量很大的程序有很大的用处。总之就是很强~~
生成器总共有两种产生方式:一种是声生成器表达式,一种是生成器函数。
一、生成器表达式:
#生成器表达式和列表推导式非常相似,只要把列表推导式的【】改成()即可。 g1=(i**2 for i in range(10)) print(next(g1)) #0 print(next(g1)) #1 print(next(g1)) #4
二、生成器函数
从格式上来说生成器函数和普通函数很相似,只有一点的区别。那就是生成器函数不需要return,而是用一个新的关键字yield。yield语句的作用主要有两点。一是返回当前语句的技术结果,二是挂起函数的状态,当下次调用时,从当前位置继续执行。
关于生成器函数我们先来看一个简单的例子。
def g_func(): print(‘first‘) yield 11111 print(‘second‘) yield 22222 print(‘third‘) yield 3333 g=g_func() print(g) #<generator object g_func at 0x0030E180> print(next(g)) #first 11111 print(next(g)) #second 22222 print(next(g)) #third 3333
接着我们来看一个高级一点的。现在有这样我们想产生一个大于某个数的的所有质数。这个一看是产生的是一个无穷的数列,所以正常方法是行不通的。就算是产生一个有穷的的序列,一旦我们的序列长度很大,直接生成这对内存占用也是巨大的,但是我们的生成器就可以完美解决这个问题。我们可以产生一个生成器,需要多少取多少即可。
import math def is_prime(n): for i in range(2,int(math.sqrt(n))+1): if n <= 1: return False if n%i==0: return False return True def creat_prime(n): while True: if is_prime(n): yield print(n) n+=1 g=creat_prime(10) for i in range(100): next(g)
标签:prim while print += SQ 区别 推导 长度 class
原文地址:https://www.cnblogs.com/linshuhui/p/8987842.html