0
4

1 回答 1

1

在您给出的第一个示例中,xfrs仅在您作为示例提供的函数中定义。我们不得不猜测,因为您没有提供完整的示例,但是来自 PyCharm 的消息表明您没有在另一个函数中定义此函数,该函数已经定义了这样的标识符,并且xfrs在全局范围内也没有。

在第二个示例中,您convert在块的try部分中分配给try .. except。由于.strptime()可能因异常而失败,convert可能最终没有被分配一个值,因为您没有在块convert外初始化。try因此,PyCharm 是正确的(同样,我们必须假设您没有提供完整的示例。

最后,在第三个示例中,您开始在函数内部定义一个函数,但仍然适用nonlocalsixdig2iso()范围内的变量 - 您在此函数中创建多少个函数嵌套并不重要,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,因为它的非局部变量xinner()的局部变量相同x,从函数outer()开始11在函数调用时添加。

你可以看出这是怎么回事,因为 is 返回的值outer()1但调用返回的函数会f()返回2。一直以来,全球x都没有受到影响。

尝试更改nonlocalglobal,您会发现结果更改为:

0 1 2

至:

0 1 1

我希望这有助于解释发生了什么nonlocal

于 2021-02-28T22:52:22.517 回答