【问题标题】:Python: using a generator as input to the `tuple` function [duplicate]Python:使用生成器作为“元组”函数的输入
【发布时间】:2020-07-03 06:03:29
【问题描述】:

我正在尝试在 Python 中评估一段代码,我在其中找到了这一行:

(int(j) for j in input().split())

当我运行它时,输出是:

<generator object <genexpr> at 0x00000266EEC8B2C8>

我无法理解这意味着什么。我将此行修改为tuple(int(j) for j in input().split()) 并运行它。对于输入我给了1 2 3,输出是(1,2,3)。 我在某处了解到没有元组理解之类的东西,那么这条线如何运行而不会出现语法错误?

【问题讨论】:

  • (x for y in list) 是一个生成器。将该生成器传递给 tuple() 会生成一个元组,您也可以将其传递给 list() 或使用列表推导。

标签: python


【解决方案1】:
<generator object <genexpr> at 0x00000266EEC8B2C8>

这就是答案。您正在创建的是一个生成器对象。当您将该对象提供给 tuple() 调用时,它会“展开”生成器并将结果放入元组中。

和这样做大致相同:

>>> def g():
...     def f():
...         for j in input().split():
...             yield int(j)
...     return tuple(f())
...
>>> g()
1 2 3
(1, 2, 3)

【讨论】:

    【解决方案2】:

    这一行生成一个可以迭代的“生成器”。您看到的输出是内存中创建生成器的地址。

    gen = (int(j) for j in input().split())
    for e in gen:
        print(e)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-16
      • 2021-08-05
      • 2018-05-20
      • 2021-03-13
      • 2023-02-06
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      相关资源
      最近更新 更多