10:生成器 迭代器 装饰器 闭包

一:生成器#生成器:为了节约内存,拿到内存地址一边循环一边计算

a=(x*2 for x in range(1,8))
print(a)

print(next(a))
print(next(a))


<generator object <genexpr> at 0x00934670>
2
4


#函数中有yield,该函数就是生成器,该函数需要赋值给一个对象(内存地址赋值给引用对象),yield类似return结束循环并且返回值,下次next()执行时,从yield后开始执行
def create_num():
print('start')
a,b=0,1
for i in range(5):
print('----1----')
yield b
print('----2----')
a,b=b,a+b
print('-----3----')
print('-----stop-----')


a=create_num()
print(a)
print(next(a))
print()
print(next(a))

<generator object create_num at 0x00934E30>
start
----1----
1

----2----
-----3----
----1----
1

 

send:赋值

def test():
i=0
while i<5:
temp=yield i
print(temp)
i+=1


a=test()
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.send('aa'))
print(next(a))

0
None
1
None
2
aa
3
None
4


二:闭包
def test01(number01):

def test02(number02):
return number01+number02

return test02



test=test01(100)
print(test(300))
print(test(400))
test08=test01(200)
print(test08(600))
print(test(500))

400
500
800
600

posted @ 2022-11-26 23:37  观呼吸  阅读(26)  评论(0)    收藏  举报