当我编程时,我喜欢给我的变量非常有意义的名字。 根据我的理解,在C ++和其他编译语言中,这两行是完全等效的:
1行:
bool a = true;
第2行:
bool bob_likes_very_much_to_eat_strawberry_on_friday_evening = true;
原因是:它将被编译,变量名称在进程中丢失(?)。
另一方面,这就是我所要求的,似乎以下两个在python中不相同:
1行:
a = True
第2行:
bob_likes_very_much_to_eat_strawberry_on_friday_evening = True
原因是它被解释,并且解释器将使用一些带有变量名的字典作为它将要查询的键(?)。我不知道这些字典是如何实现的,但对我来说,散列长变量名可能需要更长时间(?)并且在某些情况下会产生影响并不是很疯狂。
那么,在某些情况下我是否应该小心保持我的变量名称长度合理?
注1: 这个帖子很相似: Does how you name a variable have any impact on the memory usage of an application? 但没有关于python出现的明确答案(选择的答案说它一般对解释语言有影响,其他答案说它对python没有特别的影响)
注2: 我的观点不是提倡由于代码不可读而导致错误的微优化。我想知道如果通过提供额外的长名称,我是否会对执行速度做出某种妥协。
答案 0 :(得分:3)
差异应该非常小。但是我从Win7 64 Bit的Python 2.7.6的第一个答案得到了一些不同的结果。
>>> import timeit
>>> timeit.timeit(stmt="a = True", number=1000000000)
33.17448742396358
>>> timeit.timeit(stmt="bob_likes_very_much_to_eat_strawberry_on_friday_evening = True", number=1000000000)
32.47728300208675
>>> timeit.timeit(stmt="bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening_bob_likes_very_much_to_eat_strawberry_on_friday_evening = True", number=1000000000)
33.11944278143642
所以,它应该是实现和平台依赖。
就内存使用而言,考虑到页面对齐,较长的变量名称应占用更多空间。
此外,即使长变种名称花费更多的时间和空间。如果它更有意义且易于理解,我肯定会使用它。这比效率更重要。
答案 1 :(得分:1)
import timeit
a = timeit.Timer(stmt="a = 0")
a.repeat()
# => [0.025734134655067464, 0.025691468425065977, 0.025745867864316097]
b = timeit.Timer(stmt="bob_likes_very_much_to_eat_strawberry_on_friday_evening = 0")
b.repeat()
# => [0.025780711948755197, 0.025762934357771883, 0.02595848789496813]
......长变量名称似乎慢了约0.2%。
它还将使用额外的30个字节的内存。