python - Python 中的类型及其可见性之间的差异

标签 python function exception types

我只是想知道,接下来的两个函数(Python 3.x)之间有什么区别

def first_example ():
    counter = 0
    def inc_counter ():
        counter += 1
    for i in range (10):
            inc_counter ()

def second_example ():
    counter = [0]
    def inc_counter ():
        counter[0] += 1
    for i in range (10):
            inc_counter ()

第一个函数抛出关于赋值前引用的异常,但第二个函数运行良好。有人可以解释一下,为什么 python 记住数组,而不是整数?

最佳答案

您正在为第一个嵌套函数中的 counter 名称赋值,使其成为局部变量。

在第二个例子中,你从来没有直接分配给counter,使它成为一个自由变量,编译器正确地连接到父函数中的counter。您永远不会重新绑定(bind)名称,您只是在更改 counter 引用的列表。

使用nonlocal关键字将counter标记为自由变量:

def first_example ():
    counter = 0
    def inc_counter ():
        nonlocal counter
        counter += 1
    for i in range (10):
        inc_counter()

关于python - Python 中的类型及其可见性之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051730/

相关文章:

c++ - 未处理的异常,即使在添加 try-catch block 之后? C++

Java - 如何做 Python 的尝试,除了其他

python - 随机替换 numpy 向量中的索引

python - 获取对象中的碱基列表

python - 不必要地循环遍历文件名

c - 如何从用户输入中获取数组的每个元素,然后将其传递给 C 中另一个文件中的函数

python - 为什么我会收到此错误

javascript - 内部魔镜警报功能

php - 将 'eregi_replace' 函数转换为 'preg_replace' 和 'mysql_num_rows' 参数修复

javascript - 在 Protractor 中捕获 “angular could not be found on the window”