python 局部变量和全局变量 global

本文详细解释了Python中变量的作用域概念,包括局部变量和全局变量的区别。通过具体示例展示了如何使用局部变量以及如何利用global语句来修改全局变量。

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

当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。

使用局部变量

例7.3 使用局部变量

#!/usr/bin/python
# Filename: func_local.py


def func(x):
    print 'x is', x
    x = 2
    print 'Changed local x to', x

x = 50
func(x)
print 'x is still', x

(源文件:code/func_local.py

输出

$ python func_local.py
x is 50
Changed local x to 2
x is still 50

它如何工作

在函数中,我们第一次使用x的  的时候,Python使用函数声明的形参的值。

接下来,我们把值2赋给xx是函数的局部变量。所以,当我们在函数内改变x的值的时候,在主块中定义的x不受影响。

在最后一个print语句中,我们证明了主块中的x的值确实没有受到影响。

使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。

例7.4 使用global语句

#!/usr/bin/python
# Filename: func_global.py


def func():
    global x

    print 'x is', x
    x = 2
    print 'Changed local x to', x

x = 50
func()
print 'Value of x is', x

(源文件:code/func_global.py

输出

$ python func_global.py
x is 50
Changed global x to 2
Value of x is 2

它如何工作

global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。

你可以使用同一个global语句指定多个全局变量。例如global x, y, z



http://woodpecker.org.cn/abyteofpython_cn/chinese/ch07s03.html


作者推荐:

http://www.tubemate.video

### 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 应用至关重要。合理运用这些特性可以帮助开发者更好地管理复杂项目中的资源分布状况以及提升整体性能表现水平。 问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值