Python 构造函数类括号内的隐式生成器?

Python 构造函数类括号内的隐式生成器?,python,Python,如果要使用生成器中的值定义元组,这两种方法都可以: a = x for x in range(5) 在tup1中,括号是tuple类的构造函数的一部分。但是为什么它会起作用呢?在您的示例中: 第一个a1=(x代表范围(5)中的x))是一个生成器 范围(5)中x的第二个a2=x无效 第三个tup1=tuple(x代表范围(5)中的x)) 第四个tup2=tuple((x代表范围(5)中的x))将生成器转换为tuple。与编写元组(a1)相比 第三种方法是首选的,因为如果你想得到一个元组,它更

如果要使用生成器中的值定义元组,这两种方法都可以:

a = x for x in range(5)
tup1
中,括号是
tuple
类的构造函数的一部分。但是为什么它会起作用呢?

在您的示例中:

  • 第一个
    a1=(x代表范围(5)中的x))
    是一个生成器
  • 范围(5)中x的第二个
    a2=x
    无效
  • 第三个
    tup1=tuple(x代表范围(5)中的x))
  • 第四个
    tup2=tuple((x代表范围(5)中的x))
    将生成器转换为tuple。与编写
    元组(a1)
    相比

第三种方法是首选的,因为如果你想得到一个元组,它更清晰,噪音更小。第一种方法只是一个生成器,如果您实际上不需要实例本身,但希望在其上循环,则最好使用该生成器

因为它是这样定义的。也不要与
for
循环冲突syntax@JBernardo但是传递给元组类的构造函数的是什么呢?第一种方法正确吗?在
tup1
示例中,括号中有两个函数(包装生成器和函数调用)。如果函数中只有一个参数,这是正确的方法。@JBernardo这是正确的方法吗?@JBernardo它说
SyntaxError:Generator表达式必须加括号,如果不是唯一的参数
:确定。genexp应该是唯一的参数!明白了,没有“元组理解”这样的东西。这是一个生成器,稍后将其转换为元组。这两种形式都是@JBernardo所说的完全相同的操作。Python中的所有iterable类型都应该能够使用单个iterable参数进行实例化,该参数可以是生成器:
set(x代表x…
tuple(x代表x…
)等。
[x代表x…]
只是
列表(x代表x…
的语法糖。谢谢,更改了它。
a = x for x in range(5)
tup1 = tuple(x for x in range(5))
tup2 = tuple((x for x in range(5)))