遇到装饰器,算是一个难点。网上的博文转载的居多,实际动手实践的少。有些代码居然编译不通过,我也是醉了。
先上代码:
#!/usr/bin/env python3
#coding=utf-8
################################################
# File Name: p609.py
# Author: Yu LingJun
# mail: 16090222@qq.com
# Created Time: 2018-09-25
################################################
def decorator(func):
def wrapper(*arg,**kw):
print('执行装饰器内部的内容,最内层嵌套%s'%(func.__name__))
return func(*arg,**kw)
print('执行装饰器内部的内容,执行外层嵌套') #这条语句只在装饰器第一次调用时执行。
return wrapper
@decorator
def addp(x,y,z=0):
print('执行原函数')
print('%d'%(x+y+z))
return x+y+z
addp(1,3)
y=addp(1,4)
print('y=%d'%y)
y=addp(2,4)
print('y=%d'%y)
结果为:
2 || 执行装饰器内部的内容,执行外层嵌套
3 || 执行装饰器内部的内容,最内层嵌套addp
4 || 执行原函数
5 || 4
6 || 执行装饰器内部的内容,最内层嵌套addp
7 || 执行原函数
8 || 5
9 || y=5
10 || 执行装饰器内部的内容,最内层嵌套addp
11 || 执行原函数
12 || 6
13 || y=6
14 || [Finished in 0 seconds]
可以发现,装饰器函数最外层的语句执行了一次。而装饰器嵌套的函数则每次都执行。