Python中自由变量和全局变量的区别与联系

自由变量与全局变量的区别

  • 自由变量: 在某个函数或代码块中使用,但没有在该函数或代码块内部定义。 它的值来自于外部作用域,可能是全局作用域,也可能是其他函数的作用域。 自由变量不一定是全局变量,可以是局部作用域中的变量。
  • 全局变量: 定义在模块的最外层,不属于任何函数或代码块。 在整个模块内都可以访问,无论是在函数内部还是外部。 全局变量在模块范围内是可见的。

举例说明:

  1. 自由变量来自于外部作用域:
def outer_function():
    x = 10  # x 是 outer_function 的局部变量
    
    def inner_function():
        print(x)  # x 是自由变量,来自 outer_function 的作用域
    
    inner_function()

outer_function()

       在上面的例子中,inner_function() 中使用了 x,而 x 在 inner_function() 中并没有定义,它来自 outer_function() 的作用域。因此,x 对 inner_function() 来说是自由变量。

2.    全局变量作为自由变量

  • x = 10  # x 是全局变量
    
    def my_function():
        print(x)  # x 是自由变量,来自全局作用域
    
    my_function()
  • 在这个例子中,x 是全局变量,并且它在 my_function() 中作为自由变量使用
  • 3.  如果自由变量事全局变量,那么直接修改时候会报错

    def main():
        x = x + 1
        print(x)
    
    
    if __name__ == '__main__':
        x = 5
        main()

    4.  通过 global 关键字修改全局变量

    x = 10  # 全局变量
    
    def my_function():
        global x  # 明确声明 x 是全局变量
        x = x + 5  # 修改全局变量
        print(x)
    
    my_function()  # 输出 15
    

    总结:

    • 自由变量是指在函数中使用但没有在该函数内部定义的变量,它的值来自外部作用域(可能是全局作用域或其他函数的作用域)。
    • 全局变量是定义在模块最外层的变量,在整个模块中都可访问。


    文章标签:

    评论(0)