变量如何在函数内部取值而不在任何地方声明它[重复]
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)
【讨论】:
以上是关于变量如何在函数内部取值而不在任何地方声明它[重复]的主要内容,如果未能解决你的问题,请参考以下文章