見つけた!^ _ ^
通常の生活では、表現
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}]
最初はのすべての値が返さ''.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