在测试替代for _ in range(n)
(用于执行某些操作n
次,即使该操作不依赖于n
的值)时,我注意到另一种模式的表述更快,即for _ in [""] * n
。
例如:
timeit('for _ in range(10^1000): pass', number=1000000)
返回16.4秒;
然而,
timeit('for _ in [""]*(10^1000): pass', number=1000000)
需要10.7秒。
为什么在Python 3中,[""] * 10^1000
比range(10^1000)
快那么多?
所有的测试都是使用Python 3.3进行的。
for _ in range(n)
。 - Kevintimeit('for x in range(10): pass', number=10000000)
的结果为5.320733592294609
,而timeit('for x in [0]*10: pass',number=10000000)
的结果为4.120525842738559
。 - kylieCatttimeit('for _ in [0]*100: pass',number=1000000)
的结果是1.6880948543548584
,而timeit('for _ in [None]*100: pass',number=1000000)
的结果是1.6721088886260986
,还有timeit('for _ in ['']*100: pass',number=1000000)
的结果是0.13373517990112305
- 真棒! - camz**
(例如10**1000
),而^
表示二进制异或,因此10^1000
的结果为994
。 - hamstergene10^1000
时并不是想要异或(它等于994
),而是想要幂运算:**
(它等于一个后面跟着 1000 个零的数字 1)。 - Navith