我在理解部分语法时遇到了一些困难。特别是当元组需要括号()
时。
例如,下面这段代码:
c={'a':10,'b':1,'c':22,'d':10}
tup=a,b=4,5
print(a)
print(b)
print(tup)
newlist=[(x,y) for y,x in c.items()]
print(newlist)
字符串
这段代码的输出是:
4
5
(4, 5)
[(10, 'a'), (1, 'b'), (22, 'c'), (10, 'd')]
型
在列表解析语句中,当我试图去掉x,y中的括号时,我得到了一个回溯。然而,在这段代码中,每隔一个元组 * 不 * 需要括号。
为什么Python在列表解析语句中理解a,b
为元组,而不是x,y
?
在我看来,Python与元组语法不一致。我试着把括号去掉,然后把它们放回去,以了解语法是如何工作的。
1条答案
按热度按时间z9gpfhce1#
需要使用括号来给予运算符优先级。考虑下面两行代码,它们之间的区别仅在于括号:
字符串
第一行定义了一个3个元素的元组
tup_a
,(3, 14, 20)
。第二行定义了两个元组(3, 4)
和(10, 20)
,然后将它们连接成一个4个元素的元组(3, 4, 10, 20)
。错误的括号很容易导致错误:
型
第一行定义了一个3个元素的元组
(3, 40, 20)
。第二行的结果是TypeError
,因为它定义了两个元组(3, 4)
和(10, 20)
,然后试图将它们相乘,但是乘法运算符*
不知道如何处理元组。您遇到了类似的问题。请考虑以下代码行:
型
这段代码正确地定义了两个列表
l_a
和l_b
,但是当试图定义l_c
时,它引发了SyntaxError
。python的设计者认为
l_c
的语法是不明确的,你应该添加括号来明确说明你的意思是和l_a
还是l_b
相同。请注意,如果我没有在开始时添加
x = 42
,那么l_b
的代码行将引发NameError: name 'x' is not defined
,因为x
在l_b
中的角色与在l_a
中的角色不同。