1 回答
在您给出的第一个示例中,xfrs
仅在您作为示例提供的函数中定义。我们不得不猜测,因为您没有提供完整的示例,但是来自 PyCharm 的消息表明您没有在另一个函数中定义此函数,该函数已经定义了这样的标识符,并且xfrs
在全局范围内也没有。
在第二个示例中,您convert
在块的try
部分中分配给try .. except
。由于.strptime()
可能因异常而失败,convert
可能最终没有被分配一个值,因为您没有在块convert
外初始化。try
因此,PyCharm 是正确的(同样,我们必须假设您没有提供完整的示例。
最后,在第三个示例中,您开始在函数内部定义一个函数,但仍然适用nonlocal
于sixdig2iso()
范围内的变量 - 您在此函数中创建多少个函数嵌套并不重要,nonlocal
只是向外看。
nonlocal
@Carcigenicate 在他们的链接中提供了一个典型的用法(这里有一些修改):
x = 0
def outer():
x = 1
def inner():
nonlocal x
x += 1
return x
return x, inner
v, f = outer()
print(x, v, f())
outer()
调用时产生的函数返回的函数2
,因为它的非局部变量x
与inner()
的局部变量相同x
,从函数outer()
开始1
并1
在函数调用时添加。
你可以看出这是怎么回事,因为 is 返回的值outer()
,1
但调用返回的函数会f()
返回2
。一直以来,全球x
都没有受到影响。
尝试更改nonlocal
为global
,您会发现结果更改为:
0 1 2
至:
0 1 1
我希望这有助于解释发生了什么nonlocal
。