再谈lambda函数与闭包

lambda语法

lambda [arg1[,arg2,arg3....argN]]:expression

其中的参数可以没有

def foo():return 'beginman'
lambda:'beginman'

看到了一道关于闭包的题

f = [lambda: x for x in range(10)]

print(f[0])
print(f[0]())
print(f[1]())

输出为

. at 0x0000018B5ED82AE8>
9
9

其中的f可以加上括号,更易于观察

f = [(lambda: x) for x in range(10)]

这一题转化为普通函数,可以写成

def inter():
    lists = []
    for x in range(10):
        def func():
            return x
        lists.append(func)
    return lists

print(inter()[3]())

  

首先要明确一点,变量都是引用的内存的一个对象(自己的理解,不对请指出)
当程序进入循环,按道理说应该是返回0,1,2这样一个东西
但是,我们返回的是函数,且这个 函数在返回时并没有执行
这就意味着x变量指向内存里的那个对象已经为9了,
我们再次PRINT的时候, 函数才执行得出结果,计算过程里9都为9,所以结果应该为9,9,9

  

  

  

 

  

  

  

转载于:https://www.cnblogs.com/bw13/p/6549364.html

你可能感兴趣的:(再谈lambda函数与闭包)