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]())
输出为
<function <listcomp>.<lambda> 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
当程序进入循环,按道理说应该是返回0,1,2这样一个东西
但是,我们返回的是函数,且这个 函数在返回时并没有执行,
这就意味着x变量指向内存里的那个对象已经为9了,
我们再次PRINT的时候, 函数才执行得出结果,计算过程里9都为9,所以结果应该为9,9,9