什么时候元组周围需要加括号?
- 2025-03-11 08:50:00
- admin 原创
- 94
问题描述:
是否有某个地方的参考资料可以精确定义何时需要或不需要用括号括起来元组?
以下是最近令我感到惊奇的一个例子:
>>> d = {}
>>> d[0,] = 'potato'
>>> if 0, in d:
File "<stdin>", line 1
if 0, in d:
^
SyntaxError: invalid syntax
解决方案 1:
使用逗号标记组合表达式以创建元组称为。运算符优先级expression_list
规则不涵盖表达式列表;这是因为表达式列表本身不是表达式;当它们括在括号中时,它们将成为表达式。
因此,expression_list
在 Python 中,只要语言语法明确允许,就可以在任何地方使用未封闭的,但在需要未封闭的地方则不行。expression
例如if语句的语法如下:
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
由于expression
引用了产生式,因此expression_list
不允许将未封闭的 s 作为if
语句的主题。但是,for 语句可以接受expression_list
:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
因此允许以下行为:
for x in 1, 2, 3:
print(x)
解决方案 2:
在任何允许使用该expression_list
术语的地方,您无需使用括号。
该if
语句需要expression
,并且不支持expression_list
。
允许的语法示例expression_list
:
声明
return
yield
表达式赋值
(包括增强赋值)声明。
for
通过 Grepping搜索表达式、简单和复合语句文档将告诉您在 Python 语法中使用的expression_list
所有位置。expression_list
解决方案 3:
当你想避免歧义时,括号也是(语义上)必需的。
以下是两个不同的表达式......仅仅因为某些东西是“表达式列表”,并不会产生您可能期望的表达式列表:)
(1, 2, 3) + (4, 5) # results in (1, 2, 3, 4, 5) because + does sequence.extend on the tuples
1, 2, 3 + 4, 5 # this results in (1, 2, 7, 5) because + adds the elements, since there were no parentheses to protect the separate tuples
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD