作用:在不修改原来函数名称,函数调用方式的情况下,添加函数功能作用。
1、嵌套函数: 函数定义内还有函数:
def func1():
print('func1 begin to run')
def func2():
print('This is func2.')
func2()
print('func1 finish.')
func1()
运行结果:
func1 begin to run
This is func2.
func1 finish.
2、装饰器: 高阶函数和嵌套函数
__author__ = 'Bao'
import time
def addRunTime(f):
def runTime():
beginTime=time.time()
f()
endTime=time.time()
print('function run time is %f'%(endTime-beginTime))
return runTime
@addRunTime # func=addRunTime(func)
def func():
print('func is running...')
time.sleep(2)
@addRunTime # func2=addRunTime(func2)
def func2():
print('func2 is running...')
time.sleep(1)
func()
func2()
输出结果:
func is running...
function run time is 2.007462
func2 is running...
function run time is 1.014211
支持函数带参数、或者不带参数
__author__ = 'Bao'
import time
def addRunTime(f):
def runTime(*args,**kwargs):
beginTime=time.time()
f(*args,**kwargs)
endTime=time.time()
print('function run time is %f'%(endTime-beginTime))
return runTime
@addRunTime # func=addRunTime(func)
def func():
print('func is running...')
time.sleep(1)
@addRunTime # func2=addRunTime(func2)
def func2(v1,v2):
print('func2 is running...',v1,v2)
time.sleep(1)
#不参数
func()
#带参数
func2('ZhanSan','Lisi')
输出结果:
p1
p2
func2 is running... ZhanSan Lisi
function run time is 1.001893
支持返回函数f的返回值
__author__ = 'Bao'
import time
def addRunTime(f):
def runTime(*args,**kwargs):
beginTime=time.time()
r=f(*args,**kwargs)
endTime=time.time()
print('function run time is %f'%(endTime-beginTime))
return r
return runTime
@addRunTime # func2=addRunTime(func2)
def func2(v1,v2):
print('func2 is running...',v1,v2)
time.sleep(1)
return 1
print(func2('ZhanSan','Lisi'))
输出结果:
func2 is running... ZhanSan Lisi
function run time is 1.008916
1
支持修饰带参数
__author__ = 'Bao'
import time
def addRunTime(v):
def out(f):
def runTime(*args,**kwargs):
if v=='Y':
print('Sleep long.')
time.sleep(3)
else:
print('Sleep short.')
time.sleep(1)
beginTime=time.time()
r=f(*args,**kwargs)
endTime=time.time()
print('function run time is %f'%(endTime-beginTime))
return r
return runTime
return out
@addRunTime('N') # func2=addRunTime(func2)
def func1():
print('func1 is running...')
time.sleep(1)
return 1
@addRunTime('Y') # func2=addRunTime(func2)
def func2(v1,v2):
print('func2 is running...',v1,v2)
time.sleep(1)
return 2
print(func1())
print(func2('ZhanSan','Lisi'))