嵌套函数的性能开销是多少?[重复]
问题内容:
这个问题已经在这里有了答案 :
在Python中嵌套函数时会有开销吗? (6个答案)
6年前关闭。
在Python中,可以嵌套如下函数:
def do_something():
def helper():
....
....
除非Python更聪明地处理这种情况,否则helper
每次使用时do_something
都必须重新创建。实际上,这样做是否会对性能产生影响,而不是在主要功能之外创建帮助程序功能?如果是,那么效果有多大?
问题答案:
是的,在主函数中声明一个帮助程序要比分别声明它们慢:
### test_nested.py ###
import timeit
def foo():
def bar():
pass
pass
print(timeit.timeit("foo()", setup="from __main__ import foo"))
### test_flat.py ###
import timeit
def foo():
pass
def bar():
pass
print(timeit.timeit("foo()", setup="from __main__ import foo, bar"))
### Shell ###
✗ python3 ./test_flat.py
0.42562198638916016
✗ python3 ./test_nested.py
0.5836758613586426
这是大约30%的速度下降。请记住,在这种琐碎的情况下,创建和调用函数是解释器的全部工作。在任何实际使用中,差异将小得多。