【问题标题】:Python tuple vs generatorPython 元组与生成器
【发布时间】:2018-02-01 14:22:00
【问题描述】:

我无法理解为什么以下行之一返回生成器和另一个元组。

在第二行中创建生成器的具体方式和原因,而在第三行中生成元组?

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'>    

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

【问题讨论】:

    标签: python python-2.7 python-3.x iterator tuples


    【解决方案1】:

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

    这是可行的,因为(1,2,3,4) 不可能是生成器。那里没有要生成的东西,您只是指定了所有元素,而不是获取它们的规则。

    为了使您的generator 成为一个元组,表达式(i for i in sample_list) 必须是一个元组推导式。无法进行元组推导,因为推导需要可变数据类型。

    因此,应该是元组推导的语法已被重新用于生成器。

    【讨论】:

    • 其实有元组推导:xs = [1, 2, 3]; ys = tuple(x for x in xs); type(ys)
    • @visitor 这不是元组理解。 x for x in xs 是一个生成器,然后将其转换tuple
    【解决方案2】:

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

    【讨论】:

    • 我在(1+2) 下是int 而(1, 2) 是函数调用,我不明白你在生成器分配中的意思。
    • @GaurangShah:当你分配 generator = … 时。 … for … in … 在括号内时是一个生成器。
    猜你喜欢
    • 2011-04-17
    • 2015-06-23
    • 2016-12-16
    • 2011-10-06
    • 2021-10-21
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多