def inner(x):
print("inner")
return x.upper()
def outer(x):
print("outer")
return x+"!"
# inner comprehension is a list comprehension
>>> [outer(x) for x in [inner(x) for x in ('a', 'b', 'c')]]
inner
inner
inner
outer
outer
outer
['A!', 'B!', 'C!']
# inner comprehension is a generator comprehension
>>> [outer(x) for x in (inner(x) for x in ('a', 'b', 'c'))]
inner
outer
inner
outer
inner
outer
['A!', 'B!', 'C!']
列表理解总是在它发生的地方完全求值,就像
a+b
之类的任何其他表达式一样。列表理解不“知道”它在另一个列表理解中,因此它不能在此基础上有任何不同的行为。在如果要“逐位”迭代,一次只从列表理解中生成一个项,那么使用generator expression。在
下面是一个简单的比较:
相关问题 更多 >
编程相关推荐