我只是遇到了一个困惑,让我们考虑以下 2 个代码
第一个代码:
def out(): #func1
print i
i=5
Output:5
第二个:
def inc(): #func2
i=i+1
print i
i=5
执行上述程序时,func1 没有报错,func2 报错...
error: var i referenced before assignment
我很困惑 i 是局部变量还是全局变量。如果它是局部变量,那么 func1 如何访问它,如果它是全局变量,那么为什么 func2 无法访问它?
最佳答案
这取决于,当您使用 =
运算符在函数内部分配变量时,它将隐藏变量的任何其他外部作用域声明并使用 local 代替,除非它在函数内声明为 global
。
例如,如果您这样做,您的第二次尝试将如您所愿:
def inc(): #func2
global i
i=i+1
print i
i=5
另一方面,如果函数内部没有执行赋值,它将使用外部作用域声明,正如您在第一次尝试中看到的那样。
此外,如果您使用 global i
但在外部作用域中没有定义 i
,该函数也会引发 not defined 异常。
关于python - python中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167805/