Python 3.8赋值/命名表达式语法

时间:2019-10-12 21:14:21

标签: python-3.x

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) }

1 个答案:

答案 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对象中。 提供理解时,集合是由理解产生的元素构成的。

     

不能用{}构造一个空集;这个文字构造了一个空字典。

相关问题