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

def f1(a):
    def f2(x):
       return a+x
    return 2*a

错误:在调用f2(5)
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
f2(5)
NameError: name 'f2' is not defined

我在理解跨函数甚至在递归调用中使用全局变量的方式时遇到了一些困难。如果有人指出我的错误并可能在整个过程中帮助我,我将不胜感激。谢谢!!

最佳答案

您仅在f2的本地 namespace 中定义了f1;它不适用于全局。

如果您想在模块级别使用这样的嵌套函数,则必须从该函数返回它,或者定义一个global变量以将其存储在以下位置:

def f1(a):
    def f2(x):
       return a+x
    return 2*a, f2

然后将其称为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

当您调用f2时,将设置f1

关于python - python函数内的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13209539/

10-13 03:46