python关于函数调用作为参数的说明&&装饰器
2020-12-24 18:27
标签:stat amp app 导致 min __name__ main time 代码 先看代码: 输出结果: 我们看到type函数的参数是out(),执行的过程就是:out() --> inner() --> type(inner()),type里的参数实际上是 代码: 输出结果: 关于这段带代码,可能疑问点在于在 python关于函数调用作为参数的说明&&装饰器 标签:stat amp app 导致 min __name__ main time 代码 原文地址:https://www.cnblogs.com/JonnyJiang-zh/p/13210390.htmlpython关于函数调用作为参数的说明&&装饰器
简单的:
def out():
print(‘out‘)
def inner():
return ‘inner‘
return inner()
if __name__ == ‘__main__‘:
print(type(out()))
out
inner
, 最后的打印结果就是
。代码通过执行out函数,得到最终的参数。若改成print(‘inner‘)
结果就是None类型。复杂的:
import time
import functools
def timing(status=‘Train‘):
print(‘1‘)
def dec(func):
print(‘2‘)
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
func1 = func(*args, **kwargs)
print(‘[%s] time: %.3f s ‘ % (status, time.time() - start))
return func1
return wrapper
return dec
@timing(status=‘Train‘)
def Training():
time.sleep(3)
print(‘over‘)
if __name__ == ‘__main__‘:
print(‘main‘)
print(‘*‘ * 10)
print(type(Training()))
1
2
main
**********
over
[Train] time: 3.000 s
main
前面的‘1’‘1’,导致这个的原因是因为timing()
函数作为装饰器时执行函数的预处理功能,先timing()
函数的执行,先返回dec
然后执行dec()
,且Training()
作为该函数的参数,即dec(Training())
,然后就是wrapper()
函数。此时Training = timing(dec(Training())),这就是其中的‘1’‘2’的由来,也就是预处理完毕。然后就执行main函数的代码。当执行print(type(Training()))
时,就就执行wrapper()
,然后就是func1 = fun() = Training() = None。因为Training()函数是打印一句话,所以说返回值为None,所以最后的结果就是None Type。
文章标题:python关于函数调用作为参数的说明&&装饰器
文章链接:http://soscw.com/index.php/essay/37974.html