我的方法是:
def build_layers():
layers = ()
for i in range (0, 32):
layers += (True)
但这会导致
TypeError: can only concatenate tuple (not "bool") to tuple
上下文:这应该准备bpy.ops.pose.armature_layers的调用,因此我无法选择列表。
答案 0 :(得分:5)
(True)
不是元组。
请改为:
layers += (True, )
更好的是,使用发电机:
(True, ) * 32
答案 1 :(得分:1)
由于元组是不可变的,每个连接都会创建一个新的元组。最好做一些事情:
def build_layers(count):
return tuple([True]*count)
如果你需要构造元组的逻辑,只需在元组构造函数中使用列表推导或生成器表达式:
>>> tuple(bool(ord(e)%2) for e in 'abcdefg')
(True, False, True, False, True, False, True)
答案 2 :(得分:1)
只有一个元组可以添加到元组中,所以这将是一个有效的代码
def build_layers():
layers = ()
for i in range (0, 32):
layers += (True,)
然而,添加元组不是非常pythonic
def build_layers():
layers = []
for i in range (0, 32):
layers.append(True)
return tuple(layers)
如果True值依赖于i,则可以创建函数
def f(i):
True
def build_layers():
layers = []
for i in range (0, 32):
layers.append(f(i))
return tuple(layers)
但这通常最适合生成器表达式
def build_layers():
return tuple(f(i) for i in range(0,32))
顺便说一下范围的起始值是默认值0
所以这同样有效
def build_layers():
return tuple(f(i) for i in range(32))