Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:python:作用域

Python 作用域


局部变量的作用域

def main():
 
    if True:
        x1 = 1
    if False:
        x2 = 2
 
    # 可以正常访问,对于熟悉 C 的人来说,这可能有点奇怪
    # x1 被识别为局部变量,虽然它的「作用域」已经结束了
    print(x1)
 
    # UnboundLocalError: cannot access local variable 'x2'
    # where it is not associated with a value
    # python 可以检测到 x2 是一个局部变量,但是 x2 并没有被赋值
    # print(x2)
 
    # NameError: name 'x3' is not defined.
    # print(x3)
 
if __name__ == "__main__":
    main()

AI:Python 在函数执行前会扫描整个函数体,确定哪些变量是局部变量。这个决定基于:

  1. 赋值操作:如果某个变量在函数中被赋值,Python 会认为它是局部变量(即使赋值的代码没有运行)。
  2. 没有赋值的变量会被认为是全局变量(或未定义)。

global

AI: global 的作用是告诉 Python 函数中的变量绑定的是模块级别的全局变量,而不是局部变量。你需要 global 的情况是 重新绑定全局变量时。如果你不重新绑定该变量,而是对其内容进行操作(例如 set 和 get 对字典进行修改),是不需要声明 global 的。

nonlocal

TODO

/var/www/DokuWikiStick/dokuwiki/data/pages/程序/python/作用域.txt · Last modified: 2025/01/06 15:39 by zhonghui