gpt4 book ai didi

python - 将 yield 与 dict 理解一起使用

转载 作者:IT老高 更新时间:2023-10-28 20:41:38 35 4
gpt4 key购买 nike

作为一个人为的例子:

myset = set(['a', 'b', 'c', 'd'])
mydict = {item: (yield ''.join([item, 's'])) for item in myset}

list(mydict) 给出:

['as', 'cs', 'bs', 'ds', {'a': None, 'b': None, 'c': None, 'd': None}]

这里发生了什么? yield 有什么作用?无论 yield 后面是什么表达式,这种行为是否一致?

注意:我知道执行 mydict = {item: ''.join([item, 's']) for item in myset} 会得到字典 {'a' : 'as', 'b': 'bs', 'c': 'cs', 'd': 'ds'},这似乎是我在这里尝试做的。

最佳答案

首先,yield 返回什么?这种情况下的答案是None,因为yield返回传递给next()的参数,在这种情况下什么都没有( list 不会将任何内容传递给 next)。

现在这是你的答案:

>>> myset = set(['a', 'b', 'c', 'd'])
>>> mydict = {item: (yield ''.join([item, 's'])) for item in myset}
>>> mydict
<generator object <dictcomp> at 0x0222BB20>

dict理解变成了一个生成器,因为你在函数体上下文中使用了yield!这意味着整个事物在传递到 list 之前不会被评估。

这就是发生的事情:

  1. list 调用 next(mydict)
  2. Yield 将 ''.join([item, 's']) 返回到 list 并卡住理解。
  3. list 调用 next(mydict)
  4. 继续推导并将 yield (None) 的结果分配给字典中的 item 并开始新的推导迭代。<
  5. 回到 1。

最后,实际的生成器对象返回正文中的临时对象,即 dict。我不知道为什么会发生这种情况,而且可能也没有记录在案的行为。

关于python - 将 yield 与 dict 理解一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12358063/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com