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。