重复元组的正确惯例是什么?

时间:2017-10-05 19:16:54

标签: python python-3.x convention

由于缺少更好的标题,我想找到最合适的方式来撰写(0, 0, 0, 0)

我只是问(0,) * 4是否可以接受,是否应该接受?

是否有具体案例?

如果它可以是RGB或RGBA怎么办?我应该(0,) * n吗?

如果这是一个循环,开销有多大?

感谢。

免责声明: 我不是在征求意见,我要求达成一致意见,或任何书面规范。在没有任何支持的情况下不要给出您的唯一意见,否则此帖可能会因为偏离主题而被关闭

1 个答案:

答案 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