变量名的长度是否会影响程序运行的速度运行?
Does the length of a variable's name affect the speed the program will run?
我有一小段代码需要 运行 很长时间。我想知道我使用的变量名称的长度是否可以改变程序执行的速度。这是一个用Python.
写的非常简单的例子
程序A
x = 1
while not x == 0:
print('message')
节目B
xyz = 1
while not xyz == 0:
print('message')
如果我在两台相同的机器上 运行 程序 A 和程序 B 运行 30 年,程序 A 会比程序 B 多打印 'message' 次。
不,名称本身对结果代码的运行速度没有影响。变量名称仅用于在 Python 源中区分两个由整数索引表示的变量以进行查找 table:
>>> dis.dis('x=1')
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (None)
6 RETURN_VALUE
>>> dis.dis('xyz=1')
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (xyz)
4 LOAD_CONST 1 (None)
6 RETURN_VALUE
>>> dis.dis('x=1;xyz=2;')
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (2)
6 STORE_NAME 1 (xyz)
8 LOAD_CONST 2 (None)
10 RETURN_VALUE
在前两个中,您会注意到在生成的字节代码中没有基于变量名的区别。最后,你会看到字节码区分了两者,但只是在它们定义的顺序上,而不是标签的长度上。
差异很小,我们不能断定是因为变量名。
import timeit
x=1
xyz=1
start_time = timeit.default_timer()
for i in range(1,1000000):
if x==1:
print("message")
elapsed = timeit.default_timer() - start_time
start_time2 = timeit.default_timer()
for i in range(1,1000000):
if xyz==1:
print("message")
elapsed2 = timeit.default_timer() - start_time2
print("small variable printing = ",str(elapsed),"big variable printing = "+str(elapsed2))
结果是:
small variable printing = 3.6490847053481588 big variable printing = 3.7199463989460435
@chepner 提到的结果是正确的,Python 可能需要更长的时间来 运行 控制台中的代码,但是一旦代码被编译,结果是相同的。
为了确保这是正确的,我创建了以下代码,其灵感来自@knifer 的回答:
from time import time
from numpy import average,std
x = 1
xyzabcdexyzabcdefghidjakeldkjlkfghidjakeldkjlk = 1
short_runs = 0
long_runs = 0
for _ in range(int(2e7)):
t0 = time()
if x:
pass
short_runs += time() - t0
t0 = time()
if xyzabcdexyzabcdefghidjakeldkjlkfghidjakeldkjlk:
pass
long_runs += time() - t0
print('Runtime results:')
print(f"Small variable runs : (sum = {short_runs:.3f})")
print(f"Long variable runs : (sum = {long_runs :.3f})")
我建议的代码有些不同,因为长变量名和短变量名的试验 运行 交织在一起,因此由底层 OS 进程引起的任何差异都是最小化。
代码的结果会有所不同,具体取决于您是将代码 copy-paste
放入 Python 控制台,还是将代码作为程序调用 (python trial_runs.py
)。使用 copy-paste
运行使用长变量名称往往会更慢,而将代码作为程序调用会产生相同的 运行ning 次。
PS。实际 运行ning 时间对我来说一直在变化(在一个方向或另一个方向),所以很难报告准确的值。即使是长变量名有时也可以 运行 更快,尽管这在 Python 控制台上很少见。最大的结论是,无论哪种方式,任何差异都非常小:)
我有一小段代码需要 运行 很长时间。我想知道我使用的变量名称的长度是否可以改变程序执行的速度。这是一个用Python.
写的非常简单的例子程序A
x = 1
while not x == 0:
print('message')
节目B
xyz = 1
while not xyz == 0:
print('message')
如果我在两台相同的机器上 运行 程序 A 和程序 B 运行 30 年,程序 A 会比程序 B 多打印 'message' 次。
不,名称本身对结果代码的运行速度没有影响。变量名称仅用于在 Python 源中区分两个由整数索引表示的变量以进行查找 table:
>>> dis.dis('x=1')
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (None)
6 RETURN_VALUE
>>> dis.dis('xyz=1')
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (xyz)
4 LOAD_CONST 1 (None)
6 RETURN_VALUE
>>> dis.dis('x=1;xyz=2;')
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (2)
6 STORE_NAME 1 (xyz)
8 LOAD_CONST 2 (None)
10 RETURN_VALUE
在前两个中,您会注意到在生成的字节代码中没有基于变量名的区别。最后,你会看到字节码区分了两者,但只是在它们定义的顺序上,而不是标签的长度上。
差异很小,我们不能断定是因为变量名。
import timeit
x=1
xyz=1
start_time = timeit.default_timer()
for i in range(1,1000000):
if x==1:
print("message")
elapsed = timeit.default_timer() - start_time
start_time2 = timeit.default_timer()
for i in range(1,1000000):
if xyz==1:
print("message")
elapsed2 = timeit.default_timer() - start_time2
print("small variable printing = ",str(elapsed),"big variable printing = "+str(elapsed2))
结果是:
small variable printing = 3.6490847053481588 big variable printing = 3.7199463989460435
@chepner 提到的结果是正确的,Python 可能需要更长的时间来 运行 控制台中的代码,但是一旦代码被编译,结果是相同的。
为了确保这是正确的,我创建了以下代码,其灵感来自@knifer 的回答:
from time import time
from numpy import average,std
x = 1
xyzabcdexyzabcdefghidjakeldkjlkfghidjakeldkjlk = 1
short_runs = 0
long_runs = 0
for _ in range(int(2e7)):
t0 = time()
if x:
pass
short_runs += time() - t0
t0 = time()
if xyzabcdexyzabcdefghidjakeldkjlkfghidjakeldkjlk:
pass
long_runs += time() - t0
print('Runtime results:')
print(f"Small variable runs : (sum = {short_runs:.3f})")
print(f"Long variable runs : (sum = {long_runs :.3f})")
我建议的代码有些不同,因为长变量名和短变量名的试验 运行 交织在一起,因此由底层 OS 进程引起的任何差异都是最小化。
代码的结果会有所不同,具体取决于您是将代码 copy-paste
放入 Python 控制台,还是将代码作为程序调用 (python trial_runs.py
)。使用 copy-paste
运行使用长变量名称往往会更慢,而将代码作为程序调用会产生相同的 运行ning 次。
PS。实际 运行ning 时间对我来说一直在变化(在一个方向或另一个方向),所以很难报告准确的值。即使是长变量名有时也可以 运行 更快,尽管这在 Python 控制台上很少见。最大的结论是,无论哪种方式,任何差异都非常小:)