亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

精通Python global关键字:用法、时机与最佳实践

精通Python global关键字:用法、时机与最佳实践

本指南解释Python global 关键字、其规则、实战用例及跨模块管理全局变量的最佳实践。


什么是global关键字?

Python中,global 关键字声明函数内变量指向模块级变量而非新建局部变量。当函数需读写其自身作用域外的变量时必不可少。


global 使用规则


global 实战用法

以下示例演示陷阱与正确做法。

示例 1:从函数内访问全局变量

c = 1  # 全局变量
def add():
    print(c)
add()

输出:

1

此处 c 成功读取,因 add() 内无赋值。

示例 2:未用 global 尝试修改全局变量

c = 1  # 全局变量
def add():
    c = c + 2  # 尝试修改c
    print(c)
add()

输出:

UnboundLocalError: local variable 'c' referenced before assignment

错误因Python将 c 视为新局部变量,却在赋值前引用。

示例 3:用 global 修改全局变量

c = 0  # 全局变量
def add():
    global c
    c = c + 2
    print("Inside add():", c)
add()
print("In main:", c)

输出:

Inside add(): 2
In main: 2

声明 global c 后,函数更新模块级 c,变更在函数外可见。


跨模块共享全局变量

大型应用常将配置集中在专用模块如 config.py。其他模块导入并修改这些值,实现程序间一致状态。

示例 4:跨模块全局变量

创建 config.py:

a = 0
b = "empty"

创建 update.py 修改全局:

import config
config.a = 10
config.b = "alphabet"

创建 main.py 验证变更:

import config
import update
print(config.a)
print(config.b)

输出:

10
alphabet

此模式将共享状态集中一处,允许其他模块受控更新。


嵌套函数中使用 global

嵌套函数需修改外层函数局部变量时,仍可用 global 创建真正全局变量。

示例 5:嵌套函数中的全局变量

def foo():
    x = 20
    def bar():
        global x
        x = 25
        print("Before calling bar:", x)
        print("Calling bar now")
        bar()
        print("After calling bar:", x)
foo()
print("x in main:", x)

输出:

Before calling bar: 20
Calling bar now
After calling bar: 20
x in main: 25

foo() 内 x 仍为局部变量。嵌套 bar() 声明 x 为全局,故赋值影响模块级 x,在 foo() 结束后可见。


虽 global 方便,但通常最好设计返回新值的函数而非修改全局状态。这促进代码更清晰、易测试。详细语言规则见官方文档 global语句。

Python

  1. 精通Python数据类型:实战指南
  2. 精通Python运算符:全面指南
  3. 精通Python Pass语句:实战指南
  4. 精通Python函数参数:位置、关键字与默认参数
  5. 理解Python全局、局部与非局部变量
  6. 精通 Python 字典:创建、操作与进阶技巧
  7. 精通 Python 迭代器:工作原理与自定义构建
  8. Python 闭包详解:嵌套函数如何捕获变量
  9. 精通 Python datetime:日期、时间与时区实战指南
  10. Python 语言概览:高级、可读、交互式与面向对象
  11. Python 变量类型详解:数据类型的理解与使用
  12. Python 数字类型详解:不可变数值数据的操作与数学函数