【发布时间】:2022-01-01 08:00:29
【问题描述】:
python 中的 global 变量比 local 慢的事实很漂亮 well known 并且已经在本网站的不同问题中进行了讨论。但是,我还没有找到答案的一件事是,在代码?
到目前为止,我能找到的最佳解决方案是定义一个 closure 函数,在其中我将全局变量分配给本地变量。
from timeit import timeit
number = 10
def flocal():
number = 10
for i in range(25):
x = number
def fglobal():
for i in range(25):
x = number
def fglobal_wrapper():
global_number = number
def actual_func():
for i in range(25):
x = global_number
return actual_func
fclosure = fglobal_wrapper()
print("local: %.3f" % timeit("flocal()", "from __main__ import flocal"))
print("global: %.3f" % timeit("fglobal()", "from __main__ import fglobal"))
print("closure: %.3f" % timeit("fclosure()", "from __main__ import fclosure"))
输出:
local: 0.681
global: 0.806
closure: 0.728
但这是一个丑陋的解决方案,而且它仍然比使用局部变量慢。在函数内部使用等效的全局/常量变量,而不必将它们作为参数传递给函数,或者这种closure 解决方法,最好的方法是什么?
【问题讨论】:
-
global实际上是python中的一个关键字。 -
globals()['number']?