2024-03-29 09:49:37 发布
网友
我有一小段代码需要运行很长时间。我想知道我使用的变量名的长度是否会改变程序执行的速度。下面是一个用Python编写的非常简单的示例。你知道吗
程序A
x = 1 while not x == 0: print('message')
程序B
xyz = 1 while not xyz == 0: print('message')
如果我在两台完全相同的机器上运行程序A和程序B 30年,会比程序B编写打印“消息”的次数多。你知道吗
不,名称本身对结果代码的运行速度没有影响。变量名仅用于在Python源代码中区分两个变量,这两个变量由查找表中的整数索引表示:
>>> 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
不,名称本身对结果代码的运行速度没有影响。变量名仅用于在Python源代码中区分两个变量,这两个变量由查找表中的整数索引表示:
在前两种情况下,您将注意到在生成的字节码中没有基于变量名的区别。在最后一个例子中,您将看到字节码在这两者之间的区别,但仅取决于它们的定义顺序,而不是标签的长度。你知道吗
差别很小,我们不能断定这是因为变量的名称。你知道吗
结果是:
相关问题 更多 >
编程相关推荐