Python 变量如何在函数中取值而不在任何地方声明

Python 变量如何在函数中取值而不在任何地方声明,python,lambda,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)) def myfunc

我有一个小python脚本,其中lambda函数(在另一个函数中)中的变量不从某个地方获取任何值,但脚本仍然有效,我不理解为什么。下面我有我的代码,a是神秘的变量。我知道出于某种原因它是有效的,但我不知道为什么

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

 mydoubler = myfunc(2)
 print(mydoubler(11))
def myfunc(n):

return lambda:a*n您在此处声明了变量:

def myfunc(n):
   return lambda a : a * n
a
是lambda的参数名称

lambda a
这相当于:

def some_name(a):
    ...
唯一的区别是
lambda
就像一个没有名字的函数。匿名的

您的
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

这只是普通的lambda函数行为
from inspect import signature

print(signature(mydoubler)) # (a)
print(signature(mytripler)) # (a)