我有一个问题,理解为什么以下行之一返回生成器和另一个元组。
如何在第二行创建生成器的确切原因和原因,而在第三行中生成一个元组?
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'>
是因为元组是不可变对象,当我尝试解压缩()
内的列表时,它无法创建元组,因为它必须更改元组元组。
答案 0 :(得分:11)
您可以将元组硬编码为硬编码时创建元组,同时创建生成器以提供创建对象的方法。
这是有效的,因为(1,2,3,4)
无法成为生成器。在那里没有任何东西可以生成,你只是指定了所有元素,而不是获取它们的规则。
为了使generator
成为元组,表达式(i for i in sample_list)
必须是元组理解。没有办法让元组理解,因为理解需要一个可变数据类型。
因此,应该是元组理解的语法已被重用于生成器。
答案 1 :(得分:5)
括号用于三个不同的事物:分组,元组文字和函数调用。比较(1 + 2)
(整数)和(1, 2)
(元组)。在generator
赋值中,括号用于分组;在tuple
赋值中,括号是一个元组文字。括号表示包含逗号但不用于函数调用的元组文字。