重复元组的正确约定是什么?

What is proper convention for repeating tuples?

没有更好的标题,想找个最合适的写法(0, 0, 0, 0)

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

有没有具体的案例?

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

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

谢谢。

免责声明:我不是征求意见,我是征求普遍共识,或任何书面规范.不要在没有任何支持的情况下发表你的唯一意见,否则这个 post 有因去 off-topic 而被关闭的风险。

如果你有 100 个零要写在元组或列表中,你会问自己这个问题吗?

因为 tuple 的内容是不可变的元素,所以它等效于(解析起来更快 - 参见 post 的结尾 - 并且意图更清楚)做 (0,) * 4 而不是 (0,0,0,0)。对于 2 个元素,它开始变得荒谬,但这只是我的意见:)。

如果数字增加,可能会节省一些宝贵的调试时间,因为您错过了一个 count/paste。

对于可变类型 don't do that!,但您可以做类似的事情:例如:

  • [[] for _ in range(n)] 列表列表
  • tuple([] for _ in range(n)) 列表元组

请注意,(0,)*n 形式解析起来肯定更快。为这样的构造计时是很棘手的,因为这样做天真地跳过了解析部分。但是在这种情况下使用 evil 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快了很多倍:

0.764380931854248
5.553457021713257