什么是闭包函数
函数内部函数对外部作用域而非全局作用域的引用
def outer():
x=1
def inner():
print (x)
return inner
举例:
import requests
def outer(url):
def get():
reponse=requests.get(url)
print (reponse.text)
return get
baidu=outer("http://www.baidu.com")
baidu()
什么是装饰器
装饰器模板
def deco(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper装饰器函数举例1
#写一个统计时间的装饰器函数
def deco(func):
def wrapper(*args,**kwargs):
start=time.time()
res=func(*args,**kwargs)
stop=time.time()
print (stop-start)
return res
return wrapper
@deco
def index():
time.sleep(2)
print ("index")
index()装饰器函数举例2
import time
#写一个统计时间的装饰器函数,加上登录装饰器
def deco(func):
def wrapper(*args,**kwargs):
username=input("name---->:")
passwd=input("passwd-==>:")
if username=='yqliu' and passwd=='123':
print ("登录成功,开始执行函数")
start = time.time()
res = func(*args, **kwargs)
stop = time.time()
print(stop - start)
else:
print ("用户名密码错误")
return
return res
return wrapper
@deco
def index():
time.sleep(2)
print ("index")
index()
@deco
def home(name):
time.sleep(3)
print (name)
home("yqliu")
三层装饰器
username_list = []
def sanceng(role):
def login_deco(func):
def wrapper(*args, **kwargs):
if username_list:
print('已经登录,请勿重复登录')
res = func(*args, **kwargs)
return res
username_inp = input('请输入用户名:')
pwd_inp = input('请输入密码:')
with open(f'{role}_info.txt', 'r', encoding='utf8') as fr:
for user_info in fr:
username, pwd = user_info.strip().split(':')
if username_inp == username and pwd_inp == pwd:
print('登录成功')
username_list.append(username)
res = func(*args, **kwargs)
return res
else:
print('登录失败')
return wrapper
return login_deco
@sanceng('admin')
def index(x, y):
print('index')
print('x,y', x, y)
return 123
res = index(10, 20)原文:https://www.cnblogs.com/ztzdhbg/p/11578783.html