在论证中使用理解

Using comprehensions in arguments

考虑一下:

>>> set((x,y) for x in range(1,3) for y in range(1,3))                                                                                                                                                            
{(1, 1), (1, 2), (2, 1), (2, 2)}

但是,如果我只采用上面使用的论点:

>>> (x,y) for x in range(1,3) for y in range(1,3)

我得到SyntaxError

我的第一个电话 set 到底得到了什么?一个东西?一种表达?它们是不同的东西吗?

从技术上讲,set 需要 最多 1 个参数,所以我不明白第一个表达式是如何工作的,但第二个表达式却没有。

A​​ generator expression 有外括号,但当它是函数的唯一参数时允许省略它们。在这种情况下省略外括号只不过是语法糖。

所以表达式:

set((x,y) for x in range(1,3) for y in range(1,3))

完全相同:

set(((x,y) for x in range(1,3) for y in range(1,3)))