gpt4 book ai didi

python - 为什么这条 python 行不是错误?

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:35 24 4
gpt4 key购买 nike

为什么下一个 python 行不是语法错误?如果真的不是那么我该如何使用它以及在什么情况下它会有用?

 a= range(10)[1:3]=[2,3]

最佳答案

Python 支持在同一行上进行多项赋值:

>>> a = b = c = 2
>>> a
2
>>> b
2
>>> c
2

由于您将 first 分配给列表(python 中的可变对象),然后将该列表的两个部分(可变对象)和 a 分配给第三项的内容,python 可以接受。如果您将中间值替换为不可变的值,则会出现错误。

>>> a = 'foo' = 'bar'
File "<input>", line 1
SyntaxError: can't assign to literal

>>> a = {}['foo'] = 'bar'
>>> a
'bar'

有趣的是,像这样的一行仍然会抛出错误,因为您正试图将值 3 和 4 分配给文字值 1 和 2。

>>> a = [1, 2] = [3, 4]
File "<input>", line 1
SyntaxError: can't assign to literal

虽然这不是:

>>> a = [1, 2][:] = [3, 4]
>>> a
[3, 4]

本例中的关键是,通过使用切片表示法,您将分配给列表内部的范围,而不是重新分配给列表中的文字值。

另外,线条

>>> a = [[], []] = [{}, {}]
>>> a
[{}, {}]

>>> a = [b, c] = 3, 4
>>> b
3
>>> c
4

是有效的,第一个是因为内部列表和字典都是可变的和可迭代的,第二个是因为您将 3 和 4 分配给变量 b 和 c 而不是文字(感谢 Sven :D)。

编辑以回答运算符(operator)的最后一个问题。

>>> a = 1
>>> b = 2
>>> a,b = b,a = a,b
>>> a
2
>>> b
1

这归结为 b 的最终(最右边)赋值,a = a, b。观察:

>>> a, b = 'a', 'b'
>>> a, b = b, a = a, b = b, a
>>> a
'b'
>>> b
'a'
>>> a, b = b, a = b, a
>>> a
'a'
>>> b
'b'

这很令人困惑,但我的解释是,在语句完成之前,a 和 b 不会重新计算/分配新值,因此重要的分配是最右边的那个。如果最后一条语句是 a, b = a, b or b, a = b, a, a and b's values don't change.如果是 a, b = b, a 或 b, a = a, b, 则交换值。

关于python - 为什么这条 python 行不是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com