读书笔记:
生成器generator是特殊类型的迭代器iterator。可以通过next()方法来获取下一个值;也可以通过for循环来遍历,注意无限序列时设置条件。
列表推导式:
>>> seq = [x for x in range(20) if x%2]
>>> seq
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
生成器表达式:
>>> g = (x for x in range(20) if x%2)
>>> next(g)
1
>>> next(g)
3
>>> for i in g:
if i%3:
print(i,end = " ")
5 7 11 13 17 19
改写代码:
>>> def myRev(string):
i = len(string)-1
while i>=0 :
yield string[i]
i -= 1
>>> g = myRev("HandsomeTree")
>>> for c in g:
print(c)
e
e
r
T
e
m
o
s
d
n
a
H
>>> lst = [1,2,3,4,5]
>>> g = myRev(lst)
>>> for i in g:
print(i,end = " ")
5 4 3 2 1
>>> lst.reverse()
>>> lst
[5, 4, 3, 2, 1]
改写代码:
from math import sqrt
def isPrime(num):
#判断是否素数
res = False
if num == 2:
res = True
elif num > 2 :
temp = int(sqrt(num)) + 1
for i in range(2,temp):
if not num%i:
break
else:
res = True
return res
def getPrimes(num):
#获取素数的生成器
while True:
if isPrime(num):
yield num
num += 1
#print(next(getPrimes(1)))
n = 2000000
total = 0
for t in getPrimes(1):
#print(t)
if t > n:
break
else:
total += t
print(total)