您的位置:

Python局部变量的定义与使用

一、局部变量的概念

在函数内部定义的变量称为局部变量,只能在函数内部使用。局部变量的生命周期和函数相同,函数执行结束后,变量也就销毁了。


def test():
    var = "局部变量"
    print(var)
test()

执行结果为:


局部变量

在函数内部,我们定义了一个名为var的变量,并将其值设定为"局部变量",随后我们又在函数内将变量输出。输出结果说明了我们的局部变量是起效的。

二、局部变量的作用域

作用域决定了局部变量的访问权限。Python中的作用域分为四种:

  1. Local:局部变量的作用域为函数内部,在函数外部无法访问这些变量
  2. Enclosing:在嵌套函数中引用变量,如下面的例子
  3. Global:全局变量的作用域为整个Python模块,在模块内引用变量时都能访问该变量
  4. Built-in: Python内置变量的作用域是Python内置模块中的所有函数

Enclosing作用域的例子


def outer():
    x = "outer function"
    def inner():
        y = "inner function"
        print(x)
        print(y)
    inner()
outer()

输出结果为:


outer function
inner function

分析一下这个例子,我们定义了一个名为outer的函数,并在函数内定义了一个x变量。然后在函数内部,我们再定义了一个inner函数,并在其中定义了一个y变量,随后我们输出了x和y。由输出结果可知,在inner函数内部,它可以访问到outer函数内部定义的x变量,因为outer就是inner的Enclosing作用域。

三、函数中变量的生命周期

函数是Python中常见的代码块结构,变量的生命周期和函数密切相关,一旦函数退出,其内部所定义局部变量也随之消失,这就决定了在函数中定义的变量与外部变量的访问权限。


def test():
    var = "函数内的局部变量"
    print(var)
test()
print(var)  # 错误代码

这个例子中,我们定义了test函数,并在函数内部定义了一个var局部变量,执行函数后会输出它的值。但是在函数外部,我们不能再访问这个变量了,因为它的作用域只在函数内部。因此在函数外尝试输出var值,Python解释器会报错。

四、全局变量和局部变量的区别

全局变量和局部变量有一个根本的区别,局部变量在函数执行结束后就会销毁。因此,在Python中为了避免变量污染,我们常常使用局部变量去代替全局变量。全局变量在程序的各个部分中都能使用,通常声明在函数的外部或者在模块顶层。

使用局部变量:


n = 10  # 全局变量
def add(m):
    global n
    n += m  # 修改全局变量n
    print(n)
add(5)

这个例子中,我们定义了一个全局变量n,并在add函数中修改了n的值,由于n是全局变量,所以在函数执行结束后,n的值并没有被销毁,而是继续存在。

使用全局变量和局部变量:


n = 10 # 全局变量
def add(m):
    n = 1 # 局部变量,与全局变量n不一样
    n += m # 修改局部变量n
    print(n)
add(5)
print(n)

执行结果为:


6
10

从代码和执行结果可知,我们在add函数中定义了一个名为n的局部变量,并给它赋值为1,而不是使用全局变量n。在函数执行结束后,全局变量n的值并没有改变。

五、函数参数的传递方式

Python中函数参数有两种传递方式:值传递和引用传递。

值传递:


def func(a):
    a = 10 
    print(a)
b = 20
func(b)
print(b)

执行结果为:


10
20

可以看到,尽管函数内部修改了a的值,但是在函数外部b的值并没有改变,所以b是值传递。

引用传递:


def func(lst):
    lst[0] = 100
    print(lst)
lst = [1, 2, 3]
func(lst)
print(lst)

执行结果为:


[100, 2, 3]
[100, 2, 3]

我们在函数内部修改了lst的值,在函数外部输出lst值时,它已经被修改了。因此,lst是引用传递。

六、小结

本文主要从局部变量的概念和作用域、函数中变量的生命周期、全局变量和局部变量的区别、函数参数的传递方式等多个方面来详细阐述了Python中局部变量的定义与使用。局部变量作为函数内部的变量,其作用域只在函数内部有效,因此使用它能避免变量污染。在使用过程中,应该注意全局变量和局部变量的区别,以及函数参数的传递方式。