# 生成器
def generator():
yield 1
yield 2
yield 3
gen = generator() # 调用生成器函数创建一个生成器对象
for item in gen:
print(item)
# 生成器的简单写法
gen = (i * i for i in range(10)) # 这里用圆括号,方括号是列表
for item in gen:
print(item)
# 生成器是一种特殊类型的函数,它可以在需要时生成值,而不必一次性生成所有值并将它们存储在内存中。
# 生成器能够延迟产生序列的元素,这样可以减少内存占用并提高效率,特别是在处理大量数据时。
# 生成器
def counter_generator(low, high):
while low <= high:
yield low
low += 1
for i in counter_generator(5,10):
print(i, end=" ")
# 在while循环中,每当执行到yield语句时,返回变量low的值并且生成器状态转为挂起。
# 在下一次调用生成器时,生成器从之前冻结的地方恢复执行然后变量low的值加一。生成器继续while循环并且再次来到yield语句。。。
# 生成器的使用场景:
# 通常使用生成器进行惰性求值。这样使用生成器是处理大数据的好方法。如果你不想在内存中加载所有数据,你可以使用生成器,一次只传递给你一部分数据。
# 生成器是一定不能重复循环的
# 如果想要使得类的实例变成生成器,可以用__iter__和__next__方法实现。
闭包(__Closures__):是由另外一个函数返回的函数。我们使用闭包去除重复代码。
def add_number(num):
def adder(number):
# adder是一个闭包
return num + number
return adder
a_10 = add_number(10)
print(a_10(21))
# adder是一个闭包,把一个给定的数字与预定义的一个数字相加