python第五天学习总结
1.装饰器详解def wrpper(f): #f = func1
def inner(*args,*kwargs):
print(111)
ret = f(args,**kwargs)
print(333)
return ret
return inner #返回给wrapper(func1)
@wrpper # func1 = wrapper(func1)
def func1():
print(222)
return 444
func1() #inner()
# 1,执行wrapper函数,将func1函数名传给f
# 2,将inner函数名 返回给了新的变量func1(func1 = inner)
# 3,func1()==inner()执行inner函数*
#4,执行print(111)执行func1 函数print(222)执行print(333)
2.函数的有效信息
#########没有装饰器
def logger(username,pwd):
''' #描述此函数的作用及参数和返回值等信息
此函数是登录函数,需要username,pwd两个参数
:return:True
'''
print(111)
return True
print(logger.doc) #查看函数的描述信息
print(logger.name) #查看函数的函数名
###########有装饰器
from functools import wraps #1.引入wraps
def wrpper(f):
@wraps(f) #2.@wraps(f)
def inner(*args,*kwargs):
'''
inner函数的信息
:param args: 参数
:param kwargs: 参数
:return: True
'''
print(222)
ret = f(args,**kwargs)
print(333)
return ret
return inner
@wrpper
def logger(username,pwd):
'''
此函数是登录函数,需要username,pwd两个参数
:return:True
'''
print(111)
return True
print(logger.doc) #输出logger函数信息,如果没有1 2的操作,输出inner函数的信息
print(logger.name) #输出logger,如果没有1 2的操作,输出inner函数名
3 装饰器的升级
##带参数的装饰器
def wrpperout(flag1): #flag1=flag=True
def wrpper(f):
def inner(*args,kwargs):
if flag1:
print(0)
ret = f(*args,*kwargs)
print(9)
return ret
else:
ret = f(args, kwargs)
return ret
return inner
return wrpper
flag = True
@wrpperout(flag) #1.将@与函数分开,执行wrpperout(flag)返回wrpper 2.将@与wrpper结合@wrpper
def func1():print(111)
@wrpperout(flag)br/>print(222)
@wrpperout(flag)
def func3():
print(333)
func1()
func2()
func3()
###多个装饰器装饰一个函数
def wrapper1(func):
def inner1():
print('wrapper1 ,before func')
func()
print('wrapper1 ,after func')
return inner1
def wrapper2(func):
def inner2():
print('wrapper2 ,before func')
func()# inner1()
print('wrapper2 ,after func')
return inner2
def wrapper3(func):
def inner3():
print('wrapper3 ,before func')
func()
print('wrapper3 ,after func')
return inner3
@wrapper3@wrapper2
页:
[1]