重复元组的正确约定是什么?
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
没有更好的标题,想找个最合适的写法(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