【发布时间】:2012-09-03 16:42:09
【问题描述】:
作为一个人为的例子:
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'},这似乎是我在这里尝试做的。
【问题讨论】:
-
哇。我会因为 SyntaxError 而赔钱。
-
@DSM -- 我也是。我猜 dict 理解是作为生成器表达式的包装器实现的。 (毕竟
{k:v for k,v in ...}等价于dict((k,v) for k,v in ...) -
我认为这个故事的寓意是:“不要在家里尝试这个”;-)。但非常有趣的问题 (+1)。
-
在 python3 中,
list(mydict)只是['as', 'cs', 'bs', 'ds']