Python元组与生成器

Python元组与生成器,python,python-2.7,python-3.x,iterator,tuples,Python,Python 2.7,Python 3.x,Iterator,Tuples,我很难理解为什么下面的一行返回生成器和另一个元组 第二行是如何创建生成器的,为什么在第三行是生成元组的 sample_list = [1, 2, 3, 4] generator = (i for i in sample_list) tuple_ = (1, 2, 3, 4) print type(generator) <type 'generator'> print type(tuple_) <type 'tuple'> sample_list=[1,2,3

我很难理解为什么下面的一行返回生成器和另一个元组

第二行是如何创建生成器的,为什么在第三行是生成元组的

sample_list = [1, 2, 3, 4]
generator = (i for i in sample_list)
tuple_ = (1, 2, 3, 4)

print type(generator)
<type 'generator'>

print type(tuple_)
<type 'tuple'>    
sample_list=[1,2,3,4]
生成器=(样本_列表中的i代表i)
元组(1,2,3,4)
打印类型(生成器)
打印类型(元组)

这是因为元组是不可变的对象,当我试图在
()
中解包列表时,它无法创建元组,因为它必须更改元组元组

括号用于三种不同的功能:分组、元组文本和函数调用。比较
(1+2)
(整数)和
(1,2)
(元组)。在
生成器
赋值中,括号用于分组;在
tuple
赋值中,括号是一个tuple文本。括号包含逗号且不用于函数调用时表示元组文字。

您可以想象在硬编码值时创建元组,而在提供创建对象方法的地方创建生成器

这是因为
(1,2,3,4)
不可能是发电机。这里没有要生成的内容,您只是指定了所有元素,而不是获取它们的规则

为了使
生成器
成为元组,表达式
(示例列表中的i代表i)
必须是元组。没有办法实现元组理解,因为理解需要可变的数据类型


因此,应该是元组理解的语法已经被生成器重用

我在
(1+2)
下是int,而
(1,2)
下是函数调用,我不明白的是你在生成器赋值中的意思。@GaurangShah:当你赋值
生成器=…
…for…in…
是一个位于括号内的生成器。实际上有元组理解:
xs=[1,2,3];ys=元组(x表示x中的x);键入(ys)
@visitor,这不是元组理解x是一个生成器,然后将其转换为
元组。