python的延迟计算和后期绑定?

python的延迟计算和后期绑定?,python,lambda,lazy-evaluation,late-binding,Python,Lambda,Lazy Evaluation,Late Binding,什么时候是懒惰评估?(生成器、if、迭代器?), 什么时候迟订?(关闭,常规功能?) 这看起来像是家庭作业,所以我不会只给你答案。这里有两个函数,您可以逐步了解这些值是如何变化的 def make_constants_like_generator(): def make_constant(x): def inner(y): return x return inner results = [] for i in [1,

什么时候是懒惰评估?(生成器、if、迭代器?), 什么时候迟订?(关闭,常规功能?)


这看起来像是家庭作业,所以我不会只给你答案。这里有两个函数,您可以逐步了解这些值是如何变化的

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)

好的,如果你使用python3,map返回一个迭代器,这就是为什么d和c是相同的我使用python2.7,d是我想知道更多关于延迟计算,后期绑定,以及map混乱的meMaybe的结果你是这个意思吗?(make_constants_like_list)def make_constants_like_list():results=[]对于[1,2,3,4]中的i:def inner(y):返回i个结果。append(inner)return results否,我的具体意思是这些结果很长,因此它们可以在函数inner(like_list)return x,应该是return,即python中的所有内容都是后期绑定的,这意味着它绑定到的内容可以更改
def map(func, iter):
    return (func(val) for val in iter)