面试题_lambda函数调用

res多少?

def func():
    return [lambda x: i * x for i in range(4)]


res = [m(2) for m in func()]

# print(res)
# 6 6 6 

# 转化版本
def func():
    li = []
    for i in range(4):
        # 此处为函数的定义处
        def lam(x):
            # 等到lam函数调用时
            # 会向外界寻找局部变量i
            # 此时i已经被for循环完毕, i==3,
            # 与内函数发生绑定关系
            # 所以这四个函数调用的i都是3
            return x * i

        li.append(lam)
    # li列表内是四个lam函数
    return li


# 此处是函数的调用处
res = [m(2) for m in func()]
print(res)

你可能感兴趣的:(面试题_lambda函数调用)