生成器、装饰器(闭包)
程序员文章站
2022-06-11 22:05:54
...
#生成器是特殊的迭代器,一遍循环一遍计算的机制
# g = (x for x in range(10))
# #for i in g:
# # print(i)
#
# print(next(g))
def fb(month):
m= 0
a,b = 0,1
while m<month:
# print(b)
yield b #生成器的核心
# return b #return 不能用,后面不运行
a,b = b,a+b
m +=1
# print(a,b)
if __name__ == '__main__':
ret =fb(5)
print(type(ret))
# for item in ret:
# print(item)
# print(next(ret))
# print(next(ret))
# print(next(ret))
# print(next(ret))
# next(ret) #可以用next传值唤醒生成器
# ret.send(None) #send第一次传值为none,唤醒生成器,第一次不能传值
# # 再用send传值
#装饰器
# def func1():
# print('这是函数func1')
#
# if __name__ == '__main__':
# func1()
# func2 =func1
# print(id(func1))
# print(id(func2))
# func2()
# #函数的引用就是地址的传递
# # print(id(1999999))#pycharm中为了提高运行效率,扩大了小整数池的范围,小整数池范围-5到256
# # print(id(1999999))
# # print(id(1999999))
#
# #闭包
# # def wrapper(num1):
# # def inner(num2):
# # print(num1,num2)
# # return inner
# #
# # if __name__ == '__main__':
# # f1 = wrapper(1)
# # f1(2)
# # print(f1)
#
# def linner(k,b):
# def inner(x):
# print(x*k+b)
#
# return inner
# if __name__ == '__main__':
# l = linner(1,2)
# l(3)
# print(l)
#闭包存在的问题:消耗内存
#LEGB原则
'''
Local 可能是在一个函数或者类方法内部。
Enclosed 可能是嵌套函数内,比如说 一个函数包裹在另一个函数内部。
Global 代表的是执行脚本自身的最高层次。
Built-in 是Python为自身保留的特殊名称。
'''
def warpper(func):
def inner():
# 第一验证 验证是否登录
# 第二验证 验证是否具有权限
print(func)
func()
return inner
def ordering():
#第一验证,验证是否登陆
#第二验证,验证是否有权限
print('----------正在下单---------')
# @warpper 语法糖
def changepwd():
print('---------修改密码----------')
def showinfo():
print('-------个人信息--------')
上一篇: Pytorch C++化
下一篇: 教你如何在微信公众号上实现抽奖活动