练习代码: #概念:是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数 #简单的装饰器 def fun1(): print("ben is a good man") def fun2(): print("************") fun1() fun2() def outer(fun): def inner(): print("*************") fun() return inner #f 是函数fun1的加强版 f = outer(fun1) f() #复杂一点的装饰器 def say(name): print("%s is a good man" % (name)) say("ben") def outer(func): def inner(age): if age < 0: age = 0 func(age) return inner #法1 #say1 = outer(say1) #相当于 #say1 = outer(say1) @outer def say1(age): print("ben is %d year old" % (age)) say1(-10) #通用装饰器 def outer1(func): def inner(*args,**kwargs): #添加修改功能 print("********") func(*args,**kwargs) return inner @outer1 def say2(name,age): #理论上是无限制的,但实际最好不要超过6.7个 print("my name is %s,I am %d years old" %(name,age)) say2("ben",18) #偏函数 print("**************") print(int("1010",base=2)) print(int("1010",base=10)) def int2(str,base = 2): return int(str,base) print(int2("1011")) import functools #把一个参数固定住,形成一个新函数 int3 = functools.partial(int, base=2) print(int3("111"))
运行结果:
D:\pycharm\python\venv\Scripts\python.exe D:/pycharm/python/018装饰器.py
************
ben is a good man
*************
ben is a good man
ben is a good man
ben is 0 year old
********
my name is ben,I am 18 years old
**************
10
1010
11
7
Process finished with exit code 0