pin_drop当前位置:知识文库 ❯ 图文

Python全局变量 - 变量作用域与global关键字

一、概述

全局变量是在函数外部定义的变量,可以在整个模块中访问。函数内部可以读取全局变量,但不能直接修改(除非使用global关键字)。


二、语法

代码示例

global_var = value

三、读取全局变量

代码示例

message = "Hello, World!"

def greet():
    print(message)

greet()

输出:

代码示例

Hello, World!

四、函数内不能直接修改全局变量

代码示例

count = 0

def increment():
    count = count + 1

increment()

运行结果:

代码示例

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in increment
UnboundLocalError: local variable 'count' referenced before assignment

错误原因:在函数内部对count赋值时,Python会认为这是一个新的局部变量,但在赋值前引用了它。


五、函数内同名变量遮蔽全局变量

代码示例

x = 10

def func():
    x = 20
    print(f"函数内: x = {x}")

func()
print(f"函数外: x = {x}")

输出:

代码示例

函数内: x = 20
函数外: x = 10

六、注意事项

注意:全局变量在函数外部定义。函数内可以读取全局变量。函数内直接赋值会创建同名局部变量。修改全局变量需要global关键字。


七、小结

  • 定义位置:全局变量在函数外部定义

  • 读取权限:函数内可以读取全局变量

  • 变量遮蔽:函数内直接赋值会创建同名局部变量

  • 修改方法:修改全局变量需要global关键字


八、练习题

练习1

编写函数 update_counter() 修改全局计数器

练习2

编写函数 show_config() 读取全局配置字典

常见问题

为什么函数内不能直接修改全局变量?

Python 规定在函数内对变量赋值时,会默认创建一个新的局部变量。如果要修改全局变量,需要使用 global 关键字明确声明。

函数内定义同名变量会发生什么?

函数内定义同名变量会"遮蔽"全局变量,在函数内部访问的是局部变量,函数外部仍然是全局变量的值。

全局变量和局部变量哪个优先级高?

在函数内部,局部变量的优先级高于全局变量。如果存在同名变量,函数内部会优先使用局部变量。

小贴士

虽然可以通过 global 关键字修改全局变量,但应尽量避免这样做。过度使用全局变量会使代码难以维护和调试。推荐的做法是将需要共享的数据作为参数传递给函数,或者使用类和对象来管理状态。

标签: 全局变量 变量作用域 global关键字 变量遮蔽 Python基础 模块变量

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python局部变量 - 变量作用域与生命周期 下一篇: Python global关键字用法

poll相关推荐