调用一个带 yield 的函数会发生什么
调用一个函数体里有 yield 的函数,得到的是【0】。
取第一个值
运行下面这段程序: def squares(n): for i in range(n): yield i * i g = squares(1000000) print(next(g))
它到底是什么东西
运行下面这段程序: def squares(n): for i in range(n): yield i * i g = squares(1000000) print(type(g).__name__)
写一个惰性平方生成器
补全 squares(),让它一个一个地产出 0 到 n-1 的平方。 补全后只输出前 5 个的和。
一百万条也不占内存
同一个 squares(),这次传一百万。 补全后只输出它的类型名,确认它没有把一百万个数都造出来。
边产出边筛掉一半
补全 evens():从 0 到 n-1 里只产出偶数,同样要惰性。 补全后只输出前 4 个偶数的和。
装饰器解决什么问题
装饰器最适合用来【0】。
@deco 这一行做了什么
在函数上面写 @deco,等价于【0】。
装饰器里那个内层函数是干什么的
装饰器里定义的那个内层函数,作用是【0】。
装完之后结果变了
运行下面这段程序: def plus_one(f): def wrapper(*args): return f(*args) + 1 return wrapper @plus_one def add(a,