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

Python 3.x Python 3.8赋值/命名表达式语法,python-3.x,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) } 我认为这是Python实现中的一个bug。在Python

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

我认为这是Python实现中的一个bug。在Python文档中,列表和集合显示在用于理解时的行为应该相同

引用我的话:

6.2.5。列表显示

列表显示可能是方括号中包含的一系列空表达式:

列表显示::=“[”[星号列表理解]””

列表显示产生一个新的列表对象,内容由表达式列表或理解指定。当提供以逗号分隔的表达式列表时,其元素将从左到右求值,并按该顺序放入列表对象中提供理解时,列表由理解产生的元素构成。

6.2.6。设置显示

集合显示用大括号表示,与字典显示不同的是,集合显示缺少分隔键和值的冒号:

set_display::=“{”(带星号的_列表|理解)}”

集合显示产生一个新的可变集合对象,内容由一系列表达式或理解指定。提供以逗号分隔的表达式列表时,将从左到右计算其元素,并将其添加到集合对象中提供理解时,集合由理解产生的元素构成。

不能用{}构造空集;此文本构造一个空字典


我认为这是Python实现中的一个bug。在Python文档中,列表和集合显示在用于理解时的行为应该相同

引用我的话:

6.2.5。列表显示

列表显示可能是方括号中包含的一系列空表达式:

列表显示::=“[”[星号列表理解]””

列表显示产生一个新的列表对象,内容由表达式列表或理解指定。当提供以逗号分隔的表达式列表时,其元素将从左到右求值,并按该顺序放入列表对象中提供理解时,列表由理解产生的元素构成。

6.2.6。设置显示

集合显示用大括号表示,与字典显示不同的是,集合显示缺少分隔键和值的冒号:

set_display::=“{”(带星号的_列表|理解)}”

集合显示产生一个新的可变集合对象,内容由一系列表达式或理解指定。提供以逗号分隔的表达式列表时,将从左到右计算其元素,并将其添加到集合对象中提供理解时,集合由理解产生的元素构成。

不能用{}构造空集;此文本构造一个空字典