懒惰的评价和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 
+1

好,信息你使用python3,地图返回迭代器,这就是为什么d组和C组是相同的 –

+0

我使用python2.7,d是 QuantumEnergy

这看起来像家庭作业,所以我不会给你答案。这里有两个功能,您可以逐步查看值的更改方式。

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) 
+0

我想知道更多关于懒惰评估,迟绑定和地图结果混淆我 – QuantumEnergy

+0

也许你的意思是? (make_constants_like_list) DEF make_constants_like_list(): 结果= [] 对于i在[1,2,3,4]: DEF内(Y): 返回我 results.append(内) 返回结果 – QuantumEnergy

+0

否,我特意指这些是冗长的,所以他们可以通过和/或已添加打印 – Caleth