#装饰器回顾: # def wrapper(f): #f= func1# def inner(*args,**kwargs):# print(333) #1. 333# ret=f(*args,**kwargs)# print(666)# return ret# return inner# @wrapper # func1=wrapper(func1)=inner# def func1(): # inner() 定义函数,将函数加载到内存中,但是不执行,等待被调用# print(111) #2. 111# func1() #inner()# @wrapper# def func2(a,b):# print(a,b)# func2(1,2)# @wrapper# def func3(a,b):# print(a,b)# return 555# print(func3(2,3)) # #函数的有用信息:# def login(username,password):# ‘‘‘# 此函数需要用户名,密码两个参数,完成的是登录的功能.# :return:Ture 登录成功.False登录失败.# :param username:# :param password:# :return:# ‘‘‘# print(‘登录成功..‘)# return True# print(login.__name__) #打印函数名# print(login.__doc__) #打印解释 # def wrapper(f):# def inner(*args,**kwargs):# print(f.__name__)# print(f.__doc__)# """执行函数之前的操作"""# ret=f(*args,**kwargs)# ‘‘‘执行函数之后的操作‘‘‘# return ret# return inner()# @wrapper# def login(uername,password):# ‘‘‘此函数需要用户名,密码两个参数,完成的是登录的功能。# :return: True 登录成功。 False登录失败。# ‘‘‘# print(‘登录成功...‘)# return True# print(login.__name__)# print(login.__doc__)# login(1, 2) # from functools import wraps# def wrapper(f):# @wraps(f)# def inner(*args, **kwargs):# """执行函数之前的操作"""# ret = f(*args, **kwargs)# """执行函数之后的操作"""# return ret# return inner## @wrapper# def login(username, password):# """# 此函数需要用户名,密码两个参数,完成的是登录的功能。# :return: True 登录成功。 False登录失败。# """# a = 2# c = 4# print(‘登录成功...‘)# return True## print(login.__name__)# print(login.__doc__)# for i in login.__dict__:# print(i)# print(dir(login)) #带参数的装饰器 # import time# def timer_out(flag1): #falg1 = flag# def timer(f):# def inner(*args, **kwargs):# if flag1:# start_time = time.time()# time.sleep(0.3)# ret = f(*args, **kwargs)# end_time = time.time()# print(‘执行效率%s‘ % (end_time-start_time))# return ret# else:# ret = f(*args, **kwargs)# return ret# return inner# return timer## flag = True# #func1=timer_out(func1) timer_out(flag1)=timer# @timer_out(flag) # 1,步 timer_out(flag) == timer 2,@与timer结合,变成你熟悉的装饰器 @timer# def func1():# print(111)### @timer_out(flag)# def func2():# print(222)### @timer_out(flag)# def func3():# print(333)## func1()# func2()# func3() #错误案例# count = 1# def func4():# count = count + 1# print(count)## func4() # 局部只能引用全局的变量,不能修改,如果要修改,global。def func4(): count = 3 def inner(): nonlocal count count = count + 1 print(count)func4()# 子函数只能引用父函数的变量,不能修改,如果要修改,nonlocal。 #多个装饰器装饰器装饰一个函数def wrapper1(func): def inner1(): print(‘wrapper1,before func‘) func() print(‘wrapper1, after func‘) return inner1def wrapper2(func): # func = inner1 def inner2(): print(‘wrapper2,after func‘) func() # inner1() print(‘wrapper2 ,after func‘) return inner2@wrapper2 # f = wrapper2(f) 里面的f新变量 = inner1 外面的f最新变量 = inner2@wrapper1 # f = wrapper1(f) 里面的f函数名 外面的f新变量=inner1def f(): print(‘in f‘) # 3 f() # inner2()‘‘‘wrapper2 ,before funcwrapper1 ,before funcin fwrapper1 ,after funcwrapper2 ,after func‘‘‘
原文地址:https://www.cnblogs.com/weilaixiaochaoren/p/9042649.html
时间: 2024-10-04 03:35:03