函数-闭包函数 和 装饰器
时间:2021-03-30 21:55:31
收藏:0
阅读:33
闭包函数
1.1、闭函数:
被封闭起来的函数-->定义函数内部的函数,闭函数的特点是:只能在函数内用
1.2、包函数
该函数引用了一个名字,该函数是来自与 E 这一层的
1.3、闭包函数
指的是在定义在函数内部的函数,引用了一个来自外层作用域中的名字
def f1():
x = 1
def f2():
print(x)
return f2
res = f1()
res()
# 1
2、装饰器
2.1、什么是装饰器
装饰器指的是装饰别人的工具,装饰指的是为被装饰者添加新功能。
但是实现装饰器必须遵守原则:开放封闭原则
开放:对扩展新功能是开放的
封闭:对修改源代码以及调用方式是封闭的
综上:装饰器指的是创建一个工具,可以在遵循原则1,2的前提下:
原则1:不修改被装饰对象源代码
原则2:不修改被装饰对象调用方式
def ti(): #统计程序运行时间
print(‘你好‘)
time.sleep(1)
def y(x): # 装饰器
def tj(*args,**kwargs):
start = time.time()
res = x(*args,**kwargs)
end = time.time()
print(‘运行时间为:%s‘%(end - start))
return tj
ti = y(ti)
ti()
2.2、语法糖:
@ +修饰器函数名
import time
def y(x): # 装饰器
def tj(*args,**kwargs):
start = time.time()
res = x(*args,**kwargs)
end = time.time()
print(‘运行时间为:%s‘%(end - start))
return tj
@y # 语法糖
def ti(): #统计程序运行时间
print(‘你好‘)
time.sleep(1)
ti()
2.3、装饰器模板:
def deco(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper
叠加多个装饰器运行原理:

2.4、有参装饰器
封装3层的闭包函数
def f1(name):
def f2(func):
def f3(*args,**kwargs):
res = func(*args,**kwargs)
print(name)
return res
return f3
return f2
@f1(‘sailiya‘)
def name():
print(‘你好啊‘)
name()
# 你好啊
# sailiya
def f1(mode):
def f2(func):
def f3(*args, **kwargs):
name = input(‘name:‘)
pwd = input(‘pwd:‘)
if mode == 1:
if name == ‘1‘ and pwd == ‘2‘:
res = func(*args, **kwargs)
return res
else:
print(‘认证失败‘)
elif mode == 2:
print(‘这是第 %s 种验证方式‘ % mode)
else:
print(‘此验证方式当前关闭维护中‘)
return f3
return f2
number = int(input(‘选择验证方式:1,2,3\n‘))
@f1(number)
def name():
print(‘登录成功‘)
name()
wraps装饰器
from functools import wraps
def f1(func):
@wraps(func)
def f2(*args,**kwargs):
res = func(*args,**kwargs)
return f2
原文:https://www.cnblogs.com/BaiJiaZhengMing/p/14598366.html
评论(0)