python - python中变量的范围

标签 python

我只是遇到了一个困惑,让我们考虑以下 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/

相关文章:

python - 如何强制自己更优雅地编码?

python - 超出递归深度、pickle 和 BeautifulSoup

python - 如何从本地文件导入环境变量到Django

python - python 中的 UTF-8 兼容压缩

python - 如何让PyPI自动安装依赖

python - 如果列值存在则创建新行

python - pygame - 如何让 Sprite 朝着它面对矢量的方向移动?

python - 为什么我得到 python manage.py syncdb 的错误 (IndentationError : unexpected indent)

python - Django - javascript 中的模板标签 "with"

python - 如何从三个数组创建 x、y、z 坐标,其中 x 和 y 使用网格网格生成,z 取决于 x?