我有一个小的python脚本,其中lambda函数(位于另一个函数内)中的变量未从某处获取任何值,但该脚本仍然有效,我无法理解为什么。在下面的代码中,a是一个神秘的变量。我知道由于某种原因它可以工作,但我不知道为什么。
def myfunc(n):
return lambda a : a * n <== a variable takes value from where???
mydoubler = myfunc(2)
print(mydoubler(11))
答案 0 :(得分:4)
您在此处声明了变量:
def myfunc(n):
return lambda a : a * n
a
是lambda参数的名称
lambda a
这等效于:
def some_name(a):
...
唯一的区别是lambda
就像一个没有名称的函数。匿名。
答案 1 :(得分:1)
您的myfunc(n)
不会返回值,它会返回另一个具有n
的函数,该函数根据您调用的myfunc
的执行情况-将在执行时- 其参数a
,然后乘以n
:
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
mytripler = myfunc(3)
print(type(mydoubler)) # <class 'function'> - n is set to 2
print(type(mytripler)) # <class 'function'> - n is set to 3
print(mydoubler(10)) # 20
print(mytripler(20)) # 60
您甚至可以cycles您的lambda并查看所需的参数:
from inspect import signature
print(signature(mydoubler)) # (a)
print(signature(mytripler)) # (a)