Skip to main content
 首页 » 编程设计

python之这是如何在 Python 2.7.x 中生成器工作的

2025年05月04日2952php

我知道 Python 中的 for x in list 循环,但我偶然发现了一种我找不到其文档的生成器。我发现下面的示例仅在列表 a 中的列表长度为 2 时才有效,或者它给出了解包错误,所以我怀疑某种 2 元组或 dict 相关的解包器可能在玩。有人可以向我解释一下这个生成器语法是如何工作的吗?

$ python                                                                                                                                             
Python 2.7.10 (default, Oct 23 2015, 19:19:21)  
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = [[1,2],[3,4],[5,6]] 
>>> (b for c, b in a) 
<generator object <genexpr> at 0x1071abaa0> 
>>> [x for x in (b for c, b in a)] 
[2, 4, 6] 

我在调用 min 时使用此生成器的项目中遇到了它。本来我以为是传入了多个args,但是语法没有意义,单独测试发现是生成器。

https://github.com/bigbighd604/Python/blob/master/graph/Ford-Fulkerson.py#L59

请您参考如下方法:

不要被 c, b 中的逗号所迷惑。在 Python 中,逗号——而不是圆括号——定义了一个元组。你的代码等同于[x for x in (b for (c, b) in a)],它遍历a的元素,赋值给c 到 a 中每个双元素列表的第一个元素,b 到第二个,然后将 b 分配给 x。如果 a 有一个不是双元素可迭代的元素,您将得到一个 ValueError。