欢迎访问宙启技术站
智能推送

Python函数中的局部变量和全局变量有什么区别?

发布时间:2023-05-22 19:43:33

Python中局部变量和全局变量的区别是很重要的一个概念,因为它们分别用于函数内和函数外的作用域。局部变量只在函数内有效,而全局变量在整个程序中都有效。以下将对它们进行详细介绍。

1. 局部变量

局部变量是在函数内部声明的变量,只在函数内部有效,并且函数执行完毕后,局部变量会被自动销毁。局部变量只能在声明它的函数内(嵌套的函数除外)使用,其他函数无法访问该变量。下面是一个局部变量的例子:

def func():
    x = 10
    print(x) # 输出10

func()
print(x) # 报错,因为x是局部变量,无法在函数外访问

上面的代码中,变量x的作用域只在函数内部,因此在函数外部无法访问。

2. 全局变量

全局变量是在函数外部声明的变量,其作用域是整个程序内部。全局变量可以在任何函数中被使用,并且对程序中所有函数均有效。下面是一个全局变量的例子:

x = 10  # 在函数外部声明全局变量

def func():
    print(x) # 输出10

func()
print(x) # 输出10

在上面的代码中,变量x是全局变量,它可以在任何函数中被使用,包括声明在函数内的函数。

3. 全局变量和局部变量命名的优先级

在Python中,局部变量在函数内部优先级要高于全局变量。如果函数内部同时有局部变量和全局变量,函数会优先使用局部变量,而不会使用同名的全局变量。例如:

x = 10
y = 20

def func():
    x = 5
    print(x) # 输出5

func()
print(x) # 输出10

在上面的代码中,函数内部声明了一个变量x,因此在调用函数func时,会输出5,而不是10。函数外部的x依旧是全局变量,不会受到函数内部x的影响。

4. 变量作用域的查找顺序

在Python中,变量的作用域遵循LEGB规则,即Local->Enclosing function locals->Global->Built-in。这意味着变量的查找顺序是:首先在局部作用域中查找,如果没有找到就到上一级作用域(即包含该函数的函数)中查找,然后到全局作用域中查找,最后到内建作用域中查找。

例如:

x = 10

def func():
    x = 5
    def inner_func():
        print(x) # 输出5
    inner_func()

func()

在上面的代码中,inner_func内部使用了变量x,但并没有在函数内部声明变量x,因此会按照LEGB规则先在inner_func的局部作用域中查找,没有找到,然后到包含inner_func的func函数的作用域中查找,找到了变量x的值为5,因此最终输出5。

总结:局部变量和全局变量的区别在于它们的作用域范围不同,局部变量只在函数内部有效,全局变量在整个程序中都有效。在函数内部,变量的查找顺序遵循LEGB规则,使用局部变量会覆盖同名的全局变量。