我最近遇到了在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/