python – 在函数内创建函数是否有经常性的成本?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在函数内创建函数是否有经常性的成本?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1519字,纯文字阅读大概需要3分钟。
内容图文
![python – 在函数内创建函数是否有经常性的成本?](/upload/InfoBanner/zyjiaocheng/748/2d222ccf9ad347358400cbeb18c54ac2.jpg)
我正在用Python编写一个函数,我计划为每个脚本执行运行10000次或更多次.该函数当前包含3个子函数,但在脚本完成时可能包含20个或更多子函数.我是在想;将一遍又一遍地声明这些功能(因为父功能将运行数千次)会产生经常性的性能成本,还是优化而不是问题?
将所有这些子功能分成一个类可以帮助提高性能吗?
(如果没有人知道他们头顶的答案,我打算对此进行测试并将结果发布在此处.)
解决方法:
函数定义的性能影响可以忽略不计,与定义局部变量相当.
函数体只编译一次,在执行代码块时最终得到的就是加载编译块(LOAD_CONST),然后将MAKE FUNCTION字节代码的结果存储在局部变量中:
>>> import dis
>>> def foo():
... def bar():
... pass
... print 'boo!'
...
>>> dis.dis(foo)
2 0 LOAD_CONST 1 (<code object bar at 0x106c447b0, file "<stdin>", line 2>)
3 MAKE_FUNCTION 0
6 STORE_FAST 0 (bar)
4 9 LOAD_CONST 2 ('boo!')
12 PRINT_ITEM
13 PRINT_NEWLINE
14 LOAD_CONST 0 (None)
17 RETURN_VALUE
现在,如果您多次调用包含嵌套函数的函数,您会注意到对该MAKE_FUNCTION操作的性能影响:
>>> import timeit
>>> def nonlocal(): pass
...
>>> def callnonlocal(): nonlocal()
...
>>> def calllocal():
... def localf(): pass
... localf()
...
>>> timeit.timeit('callnonlocal()', 'from __main__ import callnonlocal')
0.39106082916259766
>>> timeit.timeit('calllocal()', 'from __main__ import calllocal')
0.4878239631652832
请注意,尽管您将更多实际代码添加到函数中,但这种差异会变小.以上示例非常有用,仅关注MAKE_FUNCTION字节代码对执行时间的影响.
首先要更好地优化可读性和可维护性.
内容总结
以上是互联网集市为您收集整理的python – 在函数内创建函数是否有经常性的成本?全部内容,希望文章能够帮你解决python – 在函数内创建函数是否有经常性的成本?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。