懒惰的评价和python的后期绑定?
什么时候是懒惰评价? (发生器,如果,迭代器?), 何时是晚期绑定? (关闭,正常功能?)懒惰的评价和python的后期绑定?
a = [1,2,3,4]
b = [lambda y: x for x in a]
c = (lambda y: x for x in a) #lazy evaluation
d = map(lambda m: lambda y:m, a) #closure
for i in b:
print i(None)
# 4 4 4 4
for i in c:
print i(None)
# 1 2 3 4
for i in d:
print i(None)
# 1 2 3 4
这看起来像家庭作业,所以我不会给你答案。这里有两个功能,您可以逐步查看值的更改方式。
def make_constants_like_generator():
def make_constant(x):
def inner(y):
return x
return inner
results = []
for i in [1, 2, 3, 4]:
results.append(make_constant(i))
for f in results:
print f(None)
return results
def make_constants_like_list():
x = None
results = []
for i in [1, 2, 3, 4]:
x = i
def inner(y)
return x
results.append(inner)
for f in results:
print f(None)
return results
懒惰评估正在等待,直到评估表达式的最后一刻。相反的是急切的评价。生成器表达式很懒,它在迭代之前什么都不做。列表表达式是渴望的,只要遇到,列表就会被填充值。
早期和晚期绑定涉及系统如何确定名称是指什么。 python中的所有名字都是迟到的。懒惰的评价,这意味着什么名字,势必可以改变之前使用它的表达式求值
def map(func, iter):
return (func(val) for val in iter)
我想知道更多关于懒惰评估,迟绑定和地图结果混淆我 – QuantumEnergy
也许你的意思是? (make_constants_like_list) DEF make_constants_like_list(): 结果= [] 对于i在[1,2,3,4]: DEF内(Y): 返回我 results.append(内) 返回结果 – QuantumEnergy
否,我特意指这些是冗长的,所以他们可以通过和/或已添加打印 – Caleth
好,信息你使用python3,地图返回迭代器,这就是为什么d组和C组是相同的 –
我使用python2.7,d是 –
QuantumEnergy