我发现!^_^
在正常生活中,表达
print {item: (yield ''.join([item, 's'])) for item in myset}
像这样评估:
def d(myset):
result = {}
for item in myset:
result[item] = (''.join([item, 's']))
yield result
print d(myset).next()
为什么yield result
相反return result
?我认为有必要像这样支持嵌套列表理解*:
print {i: f.lower() for i in nums for f in fruit} # yes, it's works
那么,看起来像这样的代码吗?
def d(myset):
result = {}
for item in myset:
result[item] = (yield ''.join([item, 's']))
yield result
和
>>> print list(d(myset))
['as', 'cs', 'bs', 'ds', {'a': None, 'b': None, 'c': None, 'd': None}]
首先将返回 dict 的所有值,''.join([item, 's'])
最后一个将返回 dict result
。yield
表达式的值是,None
所以 中的值result
也是None
。
* 对评估嵌套列表推导的更正确解释:
print {i: f.lower() for i in nums for f in fruit}
# eval like this:
result = {}
for i, f in product(nums, fruit): # product from itertools
key, value = (i, f.lower())
result[key] = value
print result