我最近遇到了在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)
我有一些困难,了解全局变量跨职能甚至在递归调用中使用的方式.我真的很感激,如果有人会指出我的错误,并且可以帮助我前进的道路.提前致谢 !!
您只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
.
f2
在内部定义f1
。因此,它的范围仅在function内部扩展f1
。在该空间之外,该功能f2
甚至不存在,这就是为什么您会收到错误消息。
如果您是在定义后f2
从内部某个地方进行呼叫,那么它将起作用。f1
f2
Python作用域规则的简短说明很好地说明了作用域在Python中的工作方式。
归档时间: |
|
查看次数: |
1620 次 |
最近记录: |