Python局部变量和全局变量区别

本文详细解释了Python中全局变量与局部变量的概念及其使用方法,包括如何定义和使用这两种类型的变量,以及如何解决在函数外部访问局部变量的问题。

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

1. 定义

全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量
局部变量: 在函数内、在class的方法内(未加self修饰),这就是局部变量

2. 如何使用:

在def中,我们可以定义一个局部变量,该变量仅仅在函数体中有生存期,出了这个函数体,变量就不能使用了。

def fun():
    a = 10
    print(a)
    return a + 100
print(fun())

输出:

10
110

也就是说我们在函数体内使用都是局部变量。

问题:
APPLY = 100 # 全局变量
def fun():
    a = 10 # 局部变量
    return a + 100
print(APPLY)  # 可以正常输出全局变量的值
#print(a)  # 出现错误: name 'a' is not defined 试图在函数体外获取一个局部变量的值不行

输出:

100

表示我们在程序外部是无法直接访问一个局部变量的。

如何解决:
a = None
def fun():
    global a   # 不能直接对global a = 20 直接赋值,相当于在函数定义的时候进行赋值,但是此时变量还没有初始化,未开辟内存?所以需要分开来写
    a = 20
print(a) # None
fun()  # 调用fun使用全局变量a
print(a)  # 进行了修改了 20

输出:

None
20

参考文章:
1. 莫凡python教程
2. 为什么在python函数定义中不能给全局变量赋值?
3. python变量(全局变量,局部变量,类变量,实例变量)
4. ipython笔记

### Python局部变量全局变量的定义 #### 定义 在 Python 中,**局部变量**是指在函数内部定义并仅限于该函数作用域内的变量[^2]。而 **全局变量** 则是在函数外部定义的变量,其作用范围覆盖整个程序文件,只要函数调用发生在全局变量定义之后即可访问它[^3]。 --- ### 区别 1. **作用域** - 局部变量的作用域局限于定义它的函数内部,无法在函数外部或其他函数中使用。 - 全局变量在整个脚本范围内有效,可以在任意位置被读取或修改(前提是遵循特定规则)[^3]。 2. **生命周期** - 局部变量只存在于函数执行期间,当函数结束时会被销毁。 - 全局变量则会在整个程序运行过程中持续存在,直到程序终止[^3]。 3. **赋值与声明** - 如果希望在一个函数内为定义在函数外的变量重新赋值,则需要显式地通过 `global` 关键字声明此变量为全局变量[^1]。否则,默认情况下,Python 将视之为一个新的局部变量。 - 函数内部首次出现在等号右侧的未声明变量默认被认为是全局变量的一部分;但如果在同一表达式的左侧再次出现相同名称的新变量名,则会导致错误,因为此时解释器认为这是试图引用尚未初始化的本地副本[^3]。 --- ### 使用方法 以下是关于如何正确处理局部全局变量的一些示例: #### 示例 1: 正确操作全局变量 如果要在函数内部更改已存在的全局变量值,需先利用 `global` 进行声明: ```python x = 10 # 全局变量 def modify_global(): global x # 告诉编译器我们正在使用的 'x' 是全局的那个 x += 5 modify_global() print(x) # 输出将是 15 ``` #### 示例 2: 错误尝试直接修改全局变量而不加声明 如果没有提前指定某个变量作为全局对象对待,那么即使同名也会创建新的局部实例而非影响原始数据结构: ```python y = 20 # 另一全局变量 def try_modify_without_global(): y *= 2 # 这里实际上创建了一个名为'y'的新局部变量而不是更新原有的那个 # 导致 UnboundLocalError 报错,除非加上 global y try_modify_without_global() # 上述代码会抛出异常:"UnboundLocalError" ``` #### 示例 3: 避免混淆的情况——安全引用全局变量 可以通过简单地读取全局变量的内容来避免潜在冲突: ```python z = 30 def safely_use_global(): result = z * 3 # 不涉及重命名或者再分配给新实体的操作都是允许的 return result output = safely_use_global() print(output) # 成功打印90 ``` #### 示例 4: 结合局部与全局变量 有时可能既想保留原有全局状态又生成临时计算结果存入独立空间存储下来供后续单独处置: ```python w = 40 def combine_local_and_global(): local_w = w + 7 # 创建一个基于当前全局‘w’值得到增强版版本保存至local_w之中 return local_w new_value = combine_local_and_global() print(new_value) # 显示数值应等于47 print(w) # 而原初设定保持不变依旧显示为40 ``` --- ### 总结 理解并掌握好局部变量全局变量的概念及其相互关系对于编写清晰高效的 python 应用至关重要。合理运用这些特性可以帮助开发者更好地管理复杂项目中的资源分布状况以及提升整体性能表现水平。 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值