变量如何在函数内部取值而不在任何地方声明它[重复]

Posted

技术标签:

【中文标题】变量如何在函数内部取值而不在任何地方声明它[重复]【英文标题】:How a variable takes value inside a function without declare it anywhere [duplicate] 【发布时间】:2019-09-18 21:19:52 【问题描述】:

我有一个小型 python 脚本,其中 lambda 函数(位于另一个函数内部)中的变量不会从某个地方获取任何值,但脚本仍然有效,我不明白为什么。下面我有我的代码,a 是神秘的变量。我知道出于某种原因它可以工作,但我不知道为什么。

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

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

【问题讨论】:

这只是普通的香草 lambda 函数行为 【参考方案1】:

你在这里声明了变量:

def myfunc(n):
   return lambda a : a * n

a 是 lambda 参数的名称

lambda a

这相当于:

def some_name(a):
    ...

唯一的区别是lambda 就像一个没有名字的函数。匿名的。

【讨论】:

【参考方案2】:

您的 myfunc(n) 不返回 它返回另一个具有 n 的函数,根据您调用 myfunc 的任何内容,并且将 - 执行时 - 采用 its em> 参数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

你甚至可以inspect你的 lambda 看看它需要什么参数:

from inspect import signature

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

【讨论】:

以上是关于变量如何在函数内部取值而不在任何地方声明它[重复]的主要内容,如果未能解决你的问题,请参考以下文章

变量的作用域JavaScript 内部函数

声明与定义的区别

作用域和作用域链

作用域和作用域链

10.作用域

如何访问String outside方法