从Knuth实现Grays Code的递归定义我需要向元组添加值,我有:
In [54]: tuple_one = (1,0,0)
In [55]: tuple_one
Out[55]: (1, 0, 0)
In [56]: tuple_one += (1,)
In [57]: tuple_one
Out[57]: (1, 0, 0, 1)
但是,如果我尝试分配以上内容,我会收到语法错误
In [63]: B = tuple_one += (1,)
File "<ipython-input-63-537be8a059fc>", line 1
B = tuple_one += (1,)
^
SyntaxError: invalid syntax
这是为什么? 关心保罗
答案 0 :(得分:2)
增强分配评估目标(与正常分配语句不同)仅评估一次。像x + = 1这样的增强赋值表达式可以重写为x = x + 1,以实现类似的但不完全相等的效果。在增强版本中,x仅评估一次。
此外,如果可能,实际操作是就地执行,这意味着不是创建新对象并将其分配给目标,而是修改旧对象。
在单个语句中分配元组和多个目标的例外,扩充赋值语句完成的赋值处理方式与正常赋值相同
因此,在单个语句中分配元组或/和多个目标时,请不要使用扩充赋值语句。
相反,请使用
B = tuple_one = tuple_one + (1,)
答案 1 :(得分:1)
这不是元组列表。它只是一个元组。
它不起作用的原因是因为它实际上是无效的语法。它实际上等于
B = tuple_one = tuple_one + (1,)
如果你想保存tuple_one的值,那就用两行
来做tuple_one += (1,)
B = tuple_one
如果您不这样做,请使用+
运算符
B = tuple_one + (1,)
答案 2 :(得分:0)
您的“元组列表”不是元组列表,而是单个列表。你可以说它不是一个列表,因为没有方括号([]
)。
+=
用于进行适当修改,因此将使用a+=1
代替a = a+1
。区别在于a+1
返回 a
加1
的值,但+=1
不会返回任何内容:
>>> a = 1
>>> x = a+=1 #DOES NOT WORK
File "<stdin>", line 1
x = a+=1
^
SyntaxError: invalid syntax
>>> x = a+1
>>> x
2
>>>
以下是您编辑过的专栏:
B = tuple_one + (1,)