Python: 什么是...在

Python: What is for ... in

在 Python Cookbook 第三版的第 29 页,作者作了如下声明:

"... might also be done by creating a sequence of tuples and passing them to the dict() function. For example:

p1 = dict((key, value) for key, value in prices.items() if value > 200)

作者将参数作为 "sequence" 传递给 dict() 构造函数的引用让我有点想知道...... 到底是什么 for ... in ...?这不是一个表达式吗?不能直接输入 Python 解释器:for x in (1,2,3) 并收到结果吗?例如,list()documentation 表明构造函数需要一个可迭代对象,但我不清楚发生了什么。

p1 = dict((key, value) for key, value in prices.items() if value > 200)

相当于:

p1 = {}
for key,value in prices.items():
    if value > 200:
        p1.update({key, value})

pricesdict,所以价格、商品会 return 像这样:

dict_items([(key1, value1), (key2, value2)])

dict 可以采用 key/value 对的可迭代来构造一个新实例。表达式

(key, value) for key, value in prices.items() if value > 200

是一个生成器表达式;结果是 generator 类型的值,它(在迭代时)从 prices.items() 中产生那些第二个元素大于 200 的元组。

另一种创建 generator 的方法是使用生成器函数:

def foo(p):
    for key, value in p.items():
        if value > 200:
            yield key, value

d = dict(foo(prices))