变量如何在函数内获取值而不在任何地方声明它

时间:2019-04-30 08:45:21

标签: python lambda

我有一个小的python脚本,其中lambda函数(位于另一个函数内)中的变量未从某处获取任何值,但该脚本仍然有效,我无法理解为什么。在下面的代码中,a是一个神秘的变量。我知道由于某种原因它可以工作,但我不知道为什么。

 def myfunc(n):
   return lambda a : a * n <== a variable takes value from where???

 mydoubler = myfunc(2)
 print(mydoubler(11))

2 个答案:

答案 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)