装饰器(本质:函数)
def bar(): print("in the bar") #函数bar()在以下三处位置,只有1、2处时,调用foo()才正确执行 ------------------------------ #1# def foo(): print("in teh foo") bar() #2# foo() #3#
生成器
创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
而生成器节省大量的空间,因为生成器只有在调用时才会生成相应的数据。
这时,这个函数就不再是一个普通函数,首次调用__next__()的时候执行生成器函数,遇到yield语句时返回,再次执行(__next__()或send()或for、while等)时将从上次返回的yield语句处继续执行。
def fib(max): n, a, b = 0, 0, 1 while n < max: # print(b) yield b a, b = b, a + b n = n + 1 return "done"fib(5)print(fib(5)) #此时不会获取return的值输出:<generator object fib at 0x04F8AF90> |
---|
迭代器