python中函数内的函数

One*_*ror 5 python

我最近遇到了在Python中定义函数的想法.我有这个代码,它给出了错误:


def f1(a):
    def f2(x):
       return a+x
    return 2*a
Run Code Online (Sandbox Code Playgroud)

错误:在通话时 f2(5)

Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
f2(5)
NameError: name 'f2' is not defined
Run Code Online (Sandbox Code Playgroud)

我有一些困难,了解全局变量跨职能甚至在递归调用中使用的方式.我真的很感激,如果有人会指出我的错误,并且可以帮助我前进的道路.提前致谢 !!

Mar*_*ers 8

f2在本地命名空间中定义; 它不是全球可用的.f1

如果您希望在模块级别提供这样的嵌套函数,则必须从函数返回它,或者定义一个global变量以将其存储在:

def f1(a):
    def f2(x):
       return a+x
    return 2*a, f2
Run Code Online (Sandbox Code Playgroud)

然后称之为result, f2 = f1(somevariable_or_literal).

这种global方法不global值得推荐(使用很少的方法),但看起来像:

f2 = None

def f1(a):
    global f2
    def f2_local(x):
         return a+x
    f2 = f2_local
    return 2*a
Run Code Online (Sandbox Code Playgroud)

f2你打电话的时候会被设定f1.


Col*_*lin 5

f2在内部定义f1。因此,它的范围仅在function内部扩展f1。在该空间之外,该功能f2甚至不存在,这就是为什么您会收到错误消息。

如果您是在定义后f2从内部某个地方进行呼叫,那么它将起作用。f1f2

Python作用域规则的简短说明很好地说明了作用域在Python中的工作方式。