Python中的全局变量与局部变量

文章详细阐述了Python中的全局变量和局部变量的区别,包括它们的定义、使用范围以及如何在函数内部修改全局变量。全局变量在整个Python文件中有效,而局部变量只在函数内部生效。使用`global`关键字可以使得函数内部能修改全局变量的值。同时,文章指出在局部范围内无法直接访问和修改全局变量,除非使用`global`声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 定义

全局变量指的是在整个python文件中定义的变量,而局部变量是在函数内部定义的变量。

a = 1
def yang_func():
  b = 2

从以上代码中可以看出,变量a是全局变量,变量b是定义在yang_func()函数的内部,因此b是局部变量。

2 使用范围

顾名思义,全局变量可以在定义该变量的python文件的全局使用,而局部变量只能在定义该变量的函数内部使用,代码如下所示。

a = 1
def yang_func():
    b = 2
    print(b)

print(a)

需要注意的是,可以在局部(函数)范围内使用全局变量,但是不能在全局(python文件)范围内使用局部变量,代码如下所示。

a = 1
def yang_func():
    b = a

print(b)

以上代码中,yang_func()函数中使用了全局变量a,此时b的值与a的值相同,都是1。

def yang_func():
  b = 2

yang_func()
print(b)

在以上代码中,b是局部变量,在全局范围内使用该变量时,程序会报错,报错信息如图1所示。

图1 报错信息 

该信息的含义是变量b没有定义,也就是说不能在全局范围内使用局部变量。

3 当全局变量与局部变量同名时

当全局变量与局部变量同名时,依然是互不影响的两个变量,代码如下所示。

a = 1
def yang_func():
    a = 2
    print(a)

yang_func()  
print(a)

在以上代码中,全局变量a与局部变量a同名,此时,在yang_func()中操作的是局部变量a,对全局变量a的值是没有影响的。因此,调用yang_func()函数输出的是局部变量a的值,即为2,之后打印的是全局变量a的值,即为1。

4 全局变量不能在函数中修改

在“2 使用范围”中提到,可以在局部(函数)范围内使用全局变量,但是不能在局部范围内修改全局变量。

a = 1
def yang_func():
  a += 2

在以上代码中,a是全局变量,在yang_func()即局部中,对该变量的值进行修改,此时程序报错,报错信息如图2所示。

图2 报错信息 

该信息的含义是“不能访问局部变量a,因为a没有和任何值相关联”,也就是说,在yang_func()内部在修改全局变量a的值是, 是把a当成了局部变量,但是a本身又不是局部变量,所以程序会报错,也就是说,只能在局部范围内修改局部变量的值,而不能修改全局变量的值。

5 global的用法

global是Python的关键字,其中文意思就是“全局的”。通过global关键字可以将变量声明为全局变量。

5.1在局部中改变全局变量的值

在“4 全局变量不能在函数中修改”中提到,不能在局部中修改全局变量的值。通过global则可以实现该功能,代码如下所示。

a = 1
def yang_func():
    global a
    a += 2

yang_func()  
print(a)

在yang_func()函数中,使用global通知编译器,a是全局变量而不是局部变量,此时就可以在局部中修改全局变量a的值,最后输出的a值是3。

5.2 在局部中定义全局变量

在“1 定义”中提到,定义在局部(函数)中的变量是局部变量,可以通过global在局部中定义全局变量,代码如下所示。

def yang_func():
    global b
    b = 2

yang_func()  
print(b)

此时,变量b虽然在yang_func()中定义,但是因为有global修饰,因此b是全局变量,此时打印出b的值是2。

### Python全局变量局部变量区别Python 编程中,理解作用域的概念至关重要。全局变量是在函数外部定义的变量,在整个文件范围内都有效[^1]。而局部变量则是在函数内部定义的变量,仅在其所在的函数体内可见并可用。 #### 定义方式差异 当在一个函数内赋值给一个未声明为 `global` 的新变量时,这个变量会被视为局部变量。如果希望在同一函数内的操作影响到全局命名空间中的同名变量,则需显式地通过 `global` 关键字来声明该变量为全局变量[^2]: ```python x = "outside" def my_function(): global x # 明确指出要使用的是全局变量 x x = "inside" print(x) my_function() print(x) # 输出将是 "inside", 因为我们改变了全局变量 x 的值 ``` #### 生命周期区别 另一个重要方面是生命周期的不同。局部变量只存在于调用期间;一旦函数执行完毕,这些局部对象就会被销毁。相反,只要程序还在运行,全局变量将继续存在,并保持其状态不变除非被重新赋值或者删除[^3]。 #### 使用场景最佳实践 为了提高代码质量维护性,建议遵循以下原则: - **最小化全局依赖**:尽量减少对全局变量的依赖,因为这可能导致难以追踪的状态变化潜在错误。 - **清晰的作用范围划分**:确保每个变量都有明确的目的服务区域,避免不必要的混淆。 - **利用参数传递数据**:优先考虑将所需的数据作为参数传入而不是直接访问或修改其他地方定义好的全局实体。 - **谨慎运用 `nonlocal` `global`** :这两个关键字虽然提供了灵活性但也容易引发副作用,因此应当小心应用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值