Python 3.8.0rc1。 不同语法背后的逻辑是什么?
#I can write:
[ y:=i for i in range(5) ]
#and
( y:=i for i in range(5) )
#but not
{ y:=i for i in range(5) }
^
SyntaxError: invalid syntax
#It must be:
{ (y:=i) for i in range(5) }
答案 0 :(得分:0)
我认为这是Python实现中的错误。从Python文档来看,列表和集合显示与理解一起使用时应表现相同。
https://docs.python.org/3.8/reference/expressions.html的语录,重点是我的:
6.2.5。列表显示
列表显示是用方括号括起来的一系列可能为空的表达式:
list_display :: =“ [” [starred_list |理解]“]”
列表显示将产生一个新的列表对象,其内容由表达式列表或理解列表指定。提供逗号分隔的表达式列表时,将按从左到右的顺序评估其元素,并将其按顺序放入列表对象中。 提供理解后,该列表是由理解后的元素构成的。
6.2.6。设置显示
集合显示用花括号表示,与字典显示区别在于缺少冒号分隔键和值:
set_display :: =“ {”(starred_list | comprehension)“}”
集合显示将产生一个新的可变集合对象,其内容由一系列表达式或理解指定。提供逗号分隔的表达式列表时,将从左到右评估其元素并将其添加到set对象中。 提供理解时,集合是由理解产生的元素构成的。
不能用{}构造一个空集;这个文字构造了一个空字典。