python-3.x - 如何使用具有多个内部函数的非本地语句?
问题描述
有人可以解释一下为什么这个功能不起作用吗?“非本地”语句不应该可以x
理解 in g
,因此 in h
?
def f():
def g():
nonlocal x
x= 1
def h():
print(x)
>>> SyntaxError: no binding for nonlocal 'x' found
编辑:我使用 nonlocal 是为了不在除以下x
之外的任何地方定义g()
:我必须在我的代码中定义几个变量,并希望在函数中进行init_var()
。为了方便起见,我想避免在我的主要功能中声明它们。有没有办法为此目的调整以前的代码?
解决方案
来自文档:
与语句中列出的名称
nonlocal
不同,语句中列出的名称global
必须引用封闭范围中的预先存在的绑定(不能明确确定应该创建新绑定的范围)。
您x
在 的点上并不预先存在nonlocal
。尝试x = None
在之前def g():
创建一个绑定nonlocal
来引用。
文档所述的歧义问题很容易在这里看到:
def f():
def g():
def h():
def i():
def j():
nonlocal x
哪些功能应该可以访问x
,哪些不应该?另一方面,这里很清楚:
def f():
def g():
def h():
x = None
def i():
def j():
nonlocal x
在这种情况下,f
and g
don't know ,x
while和do。h
i
j
推荐阅读
- xamarin - 关于 Xamarin 表单 - Xaml 编译
- angular - 在编辑页面上预填充 formArray - Angular4
- dynamics-crm - 在 Dynamics 365 中更新交易货币实体时出现意外错误
- laravel - 将 Laravel 中的 CNAME 与通配符子域链接的问题
- python - 如何根据新职位列表重新排序列
- python - 在 python 中使用装饰器处理异常
- asp.net - Asp.Net WebForms 重定向而不刷新母版页
- url - 禁止路径末尾的斜线是什么意思?
- mysql - Delphi 10.2 Tokyo 的插入语句中的语法错误
- android - 使 RecyclerView 对触摸“透明”