python 变量范围的定义与用法

文章目录

  • 1. 局部变量(Local Scope)
  • 示例:
  • 2. 嵌套函数变量(Enclosing Scope)
  • 示例:
  • 说明:
  • 3. 全局变量(Global Scope)
  • 示例:
  • 说明:
  • 4. 内置变量(Built-in Scope)
  • 示例:
  • 作用域规则(LEGB 规则)
  • 示例:LEGB 规则
  • 说明:
  • 总结
  • 在 Python 中,变量的作用域(scope)决定了变量在程序中的可见性和生命周期。Python 中有以下几种作用域:

    1. 局部变量(Local Scope):

    2. 在函数内部定义的变量。
    3. 只能在函数内部访问。
    4. 函数执行结束后,局部变量会被销毁。
    5. 嵌套函数变量(Enclosing Scope):

    6. 在外层函数中定义的变量,可以被内层函数访问。
    7. 使用 nonlocal 关键字可以在内层函数中修改外层函数的变量。
    8. 全局变量(Global Scope):

    9. 在模块级别定义的变量。
    10. 可以在整个模块中访问。
    11. 使用 global 关键字可以在函数内部修改全局变量。
    12. 内置变量(Built-in Scope):

    13. Python 内置的变量和函数(如 printlen 等)。
    14. 可以在任何地方访问。

    1. 局部变量(Local Scope)

    局部变量是在函数内部定义的变量,只能在函数内部访问。函数执行结束后,局部变量会被销毁。

    示例:
    def my_function():
        x = 10  # 局部变量
        print(x)
    
    my_function()  # 输出 10
    print(x)  # 报错:NameError: name 'x' is not defined
    

    2. 嵌套函数变量(Enclosing Scope)

    嵌套函数变量是在外层函数中定义的变量,可以被内层函数访问。如果内层函数需要修改外层函数的变量,需要使用 nonlocal 关键字。

    示例:
    def outer_function():
        x = 10  # 外层函数的变量
    
        def inner_function():
            nonlocal x  # 声明 x 是外层函数的变量
            x = 20  # 修改外层函数的变量
            print("Inner:", x)
    
        inner_function()
        print("Outer:", x)
    
    outer_function()
    

    输出:

    Inner: 20
    Outer: 20
    
    说明:
  • nonlocal 用于声明变量是外层函数的变量,而不是局部变量。
  • 如果没有 nonlocalx = 20 会在 inner_function 中创建一个新的局部变量,而不会修改外层函数的变量。

  • 3. 全局变量(Global Scope)

    全局变量是在模块级别定义的变量,可以在整个模块中访问。如果函数内部需要修改全局变量,需要使用 global 关键字。

    示例:
    x = 10  # 全局变量
    
    def my_function():
        global x  # 声明 x 是全局变量
        x = 20  # 修改全局变量
        print("Inside function:", x)
    
    my_function()
    print("Outside function:", x)
    

    输出:

    Inside function: 20
    Outside function: 20
    
    说明:
  • global 用于声明变量是全局变量,而不是局部变量。
  • 如果没有 globalx = 20 会在 my_function 中创建一个新的局部变量,而不会修改全局变量。

  • 4. 内置变量(Built-in Scope)

    内置变量是 Python 内置的变量和函数,可以在任何地方访问。

    示例:
    print(len("Hello"))  # 使用内置函数 len
    

    输出:

    5
    

    作用域规则(LEGB 规则)

    Python 使用 LEGB 规则来确定变量的作用域:

    1. L(Local): 局部作用域。
    2. E(Enclosing): 嵌套函数作用域。
    3. G(Global): 全局作用域。
    4. B(Built-in): 内置作用域。

    Python 会按照 LEGB 的顺序查找变量。如果局部作用域中没有找到变量,会继续在嵌套函数作用域、全局作用域和内置作用域中查找。


    示例:LEGB 规则

    x = 10  # 全局变量
    
    def outer_function():
        x = 20  # 嵌套函数变量
    
        def inner_function():
            x = 30  # 局部变量
            print("Local:", x)
    
        inner_function()
        print("Enclosing:", x)
    
    outer_function()
    print("Global:", x)
    

    输出:

    Local: 30
    Enclosing: 20
    Global: 10
    
    说明:
  • inner_function 中的 x 是局部变量。
  • outer_function 中的 x 是嵌套函数变量。
  • 模块级别的 x 是全局变量。

  • 总结

    关键字 作用域 用途
    局部作用域 在函数内部定义变量。
    nonlocal 嵌套函数作用域 在内层函数中修改外层函数的变量。
    global 全局作用域 在函数内部修改全局变量。
    内置作用域 使用 Python 内置的变量和函数。
  • 使用 nonlocalglobal 可以明确变量的作用域,避免意外的变量覆盖。
  • 如果不使用 nonlocalglobal,Python 会默认创建局部变量。
  • 作者:JNU freshman

    物联沃分享整理
    物联沃-IOTWORD物联网 » python 变量范围的定义与用法

    发表回复