我喜欢把代码减少到最低限度,喜欢保持简洁,但偶尔我会陷入是否弊大于利的困境。下面是一个我经常遇到的情况的例子,我开始思考我是否在以速度为代价进行缩小。
str = "my name is john"
##Alternative 1
for el in str.split(" "):
print(el)
##Alternative 2
splittedStr = str.split(" ")
for el in splittedStr:
print(el)
什么更快?我认为这是第二个,因为我们没有在每次迭代后分割字符串(甚至不确定我们是否这样做(?
str.split(" ")
在这两种情况下都做完全相同的事情。它创建了一个拆分字符串的匿名列表。在第二种情况下,将其分配给变量,然后获取变量的值,这是一个很小的开销。如果你因为其他原因不需要保留这个物体,那就是浪费时间。但与发生在同一循环中的其他对象引用相比,这是一个微不足道的时间量。备选方案2还将数据留在内存中,这是另一个小的性能问题。
IMHO,备选方案1比2更好的真正原因是,它没有留下稍后需要splittedStr
的暗示。
朋友,如果你想减少代码中的时间,循环元组而不是列表,但将结果分配到变量中,然后使用变量并不是最好的方法,因为你只是保留了一个内存位置来存储值,但有时你可以这样做只是为了拥有一个干净的代码,比如如果你在一行中有多个操作,比如
min(str.split(mylist)[3:10])
在这种情况下,最好有一个名为min_value的变量,例如,只是为了让事情更干净。
回到性能问题,如果您循环遍历一个列表或类似的元组,您实际上可以注意到性能的差异
这是在元组中循环
for i in (1,2,3):
print(i)
&这是在列表中循环
for i in [1,2,3]:
print(i)
你会发现使用tuple会更快!