"""
生成器
- 生成器表达式:(x ** 2 for x in range(1, 11))
- yield关键字
迭代器
- __iter__:返回迭代器对象
- __next__:取下一个迭代值
"""
from math import sqrt
def is_prime(num):
"""判断是不是素数"""
for factor in range(2, int(sqrt(num)) + 1):
if num % factor == 0:
return False
return True
def prime(num):
"""素数生成器"""
for val in range(2, num + 1):
if is_prime(val):
yield val
class Prime(object):
"""素数迭代器"""
pass
class Fib(object):
"""斐波拉切数迭代器"""
def __init__(self, num):
self.num = num
self.a, self.b = 0, 1
self.idx = 0
def __iter__(self):
return self
def __next__(self):
if self.idx < self.num:
self.a, self.b = self.b, self.a + self.b
self.idx += 1
return self.a
raise StopIteration()
def fib(num):
"""斐波拉切数生成器"""
a, b = 0, 1
for _ in range(num):
a, b = b, a + b
yield a
def main():
"""主函数"""
print('fibonacci number'.center(80, '-'))
for val in Fib(20):
print(val, end=' ')
print('\n', '-' * 80, sep='')
print('prime number'.center(80, '-'))
for val in prime(100):
print(val, end=' ')
print('\n', '-' * 80, sep='')
if __name__ == '__main__':
main()
生成器和迭代器
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 装饰器 装饰器本质是一个python函数,它可以在让其他函数不需要任何代码变动的前提下增加额外的功能,装饰器的返回...