由于缺少更好的标题,我想找到最合适的方式来撰写(0, 0, 0, 0)
。
我只是问(0,) * 4
是否可以接受,是否应该接受?
是否有具体案例?
如果它可以是RGB或RGBA怎么办?我应该(0,) * n
吗?
如果这是一个循环,开销有多大?
感谢。
免责声明: 我不是在征求意见,我要求达成一致意见,或任何书面规范。在没有任何支持的情况下不要给出您的唯一意见,否则此帖可能会因为偏离主题而被关闭。
答案 0 :(得分:4)
如果你有100个零写在元组或列表中,你会问自己这个问题吗?
由于tuple
的内容是不可变元素,所以它是等价的(解析更快 - 看到帖子的结尾 - 并且意图更清晰)来做(0,) * 4
而不是{{1 }}。对于2个元素开始变得荒谬,但这只是我的意见:)。
如果数字增加,可能会节省一些宝贵的调试时间,因为你错过了一次计数/粘贴。
对于可变类型don't do that!,但你可以做类似的事情:例如:
(0,0,0,0)
列表清单[[] for _ in range(n)]
列表元组请注意,tuple([] for _ in range(n))
表单的解析速度肯定更快。对这样的结构进行计时是很棘手的,因为这样天真地跳过了解析部分。但在这种情况下使用邪恶(0,)*n
会有所帮助:
eval
结果没有照片完成,import time
n=100000
start_time = time.time()
for _ in range(n):
eval("(0)*50")
print(time.time()-start_time)
fifty_zeros_tuple = "({})".format("0,"*50) # generate (0,0,0,...) expression to pass to eval, not clocked to avoid bias
start_time = time.time()
for _ in range(n):
eval(fifty_zeros_tuple)
print(time.time()-start_time)
的速度提高了很多倍:
(0,)*50