【问题标题】:Trouble unpacking list in a customized way以自定义方式解包列表的麻烦
【发布时间】:2019-11-20 22:19:47
【问题描述】:

我正在尝试解压缩在get_item() 函数中生成的一些列表。我知道如果我使用return 而不是yield,我可以得到想要的结果。

我试过了:

def get_item():
    yield ["k","y","t"]

if __name__ == '__main__':
    for item in get_item():
        print(item)

我得到的输出:

['k', 'y', 't']

我想得到的输出:

k
y
t

我应该进行哪些可能的更改才能保持yield 不变?

【问题讨论】:

  • 保持原样?你的意思是不改变get_item函数?
  • 是的,是@Jean-François Fabre。
  • 在不更改get_item 函数的情况下,您别无选择,只能再次迭代以获取内部循环中的各个元素,因为yield 在迭代时返回一个元素:整个列表。 yield from 是您所需要的

标签: python python-3.x generator yield


【解决方案1】:

从 Python 3.3 开始,您可以使用yield from

def get_item():
    yield from ["k","y","t"]

if __name__ == '__main__':
    for item in get_item():
        print(item)

输出:

k
y
t

yield from 是 Python 3.3 中引入的一个新技巧,它的一小部分:

对于简单的迭代器,yield from iterable本质上只是 for item in iterable的缩写形式:yield item:

(强调我的)

【讨论】:

  • Python 3.3 具体来说,很好的答案!
  • 稍微解释一下yield from 工作的原因会非常有帮助@U10-Forward。分分钟接受。谢谢。
  • @robots.txt 添加了一些 :-)
【解决方案2】:

试试下面:


def get_item():
    for _ in ["k","y","t"]:
        yield  _

if __name__ == '__main__':
    for item in get_item():
        print(item)

【讨论】:

    【解决方案3】:

    您可以使用* 运算符获得所需的结果:

    def get_item():
        yield ["k","y","t"]
    
    if __name__ == '__main__':
        print('\n'.join(*get_item()))
    

    打印:

    k
    y
    t
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多