python关于函数调用作为参数的说明&&装饰器

简单的:

先看代码:

def out():
print('out') def inner():
return 'inner' return inner() if __name__ == '__main__':
print(type(out()))

输出结果:

out
<class 'str'>

我们看到type函数的参数是out(),执行的过程就是:out() --> inner() --> type(inner()),type里的参数实际上是inner, 最后的打印结果就是<class 'str'>。代码通过执行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
<class 'NoneType'>

关于这段带代码,可能疑问点在于在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。

最新文章

  1. 如何解决Selenium中"Cannot find function addEventListener in object [object HTMLDocument]"的错误
  2. WPF Touch操作滚动条,Window弹跳
  3. YARN的内存和CPU配置
  4. tomcat &lt;context path&gt;的意义及作用
  5. kvm虚拟机安装
  6. [Js]封装好的通过className来获取元素的函数
  7. ERP联系人查询和修改(十六)
  8. struts2中的常量
  9. postgreSQL数据类型转换字符串和数值
  10. php根据IP获取经纬度信息--百度地图篇
  11. 如何修改Xampp服务器上的mysql密码
  12. Oracle忘记密码如何重
  13. 如何在集合中巧用Where来查找相关元素
  14. atom插件安装失败解决方法
  15. 如何理解 Linux 中的 load averages
  16. John&#39;s trip POJ - 1041(这题数据有点水)
  17. jquery 正则表达式
  18. Windows 8.1/10配置VS 2013 + MPI开发环境
  19. cdoj第13th校赛初赛H - Hug the princess
  20. Swift 项目中可能用到的第三方框架

热门文章

  1. Qt-数据库操作SQLite
  2. Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)
  3. 题解 洛谷 P5814 【[CTSC2001]终极情报网】
  4. javac不是内部或外部命令,也不是可运行的程序或批处理文件的错误解决方法(Windows10/Windows7)
  5. INS(Instagram)如何绑定谷歌二次验证码/谷歌身份验证/双重认证?
  6. .net 面试题 2020-2-26
  7. 图解Kubernetes——故障排查指南
  8. Java后端总结
  9. PHP gmstrftime() 函数
  10. luogu P4525 自适应辛普森法1