初识 Python: global 关键字
创始人
2024-03-01 22:41:40
0

在读这篇文章之前,确保你对 Python 全局、局部和非局部变量 有一定的基础。

global 关键字简介

在 Python 中,global 关键字允许你修改当前范围之外的变量。它用于创建全局变量并在本地上下文中更改变量。

global 关键字的规则

在 Python 中,有关 global 关键字基本规则如下:

  • 当我们在一个函数中创建一个变量时,默认情况下它是本地变量。
  • 当我们在一个函数之外定义一个变量时,默认情况下它是全局变量。你不必使用 global 关键字。
  • 我们使用 global 关键字在一个函数中来读写全局变量。
  • 在一个函数外使用 global 关键字没有效果。

使用 global 关键字(含示例)

我们来举个例子。

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

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

add()

运行程序,输出为:

1

但是我们可能有一些场景需要从函数内部修改全局变量。

示例 2:在函数内部修改全局变量

c = 1 # 全局变量
def add():
    c = c + 2 # 将 c 增加 2
    print(c)
add()

运行程序,输出显示错误:

UnboundLocalError: local variable 'c' referenced before assignment

这是因为在函数中,我们只能访问全局变量但是不能修改它。

解决的办法是使用 global 关键字。

示例 3:使用 global 在函数中改变全局变量

c = 0 # global variable

def add():
    global c
    c = c + 2 # 将 c 增加 2
    print("Inside add():", c)

add()
print("In main:", c)

运行程序,输出为:

Inside add(): 2
In main: 2

在上面的程序中,我们在 add() 函数中定义了 c 将其作为全局关键字。

然后,我们给变量 c 增加 2,即 c = c + 2。之后,我们调用了 add() 函数。最后,打印全局变量 c

正如我们所看到的,在函数外的全局变量也发生了变化,c = 2

Python 模块中的全局变量

在 Python 中,我们创建一个单独的模块 config.py 来保存全局变量并在同一个程序中的 Python 模块之间共享信息。

以下是如何通过 Python 模块共享全局变量。

示例 4:在Python模块中共享全局变量

创建 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)

运行 main.py,输出为:

10
alphabet

在上面,我们创建了三个文件: config.py, update.pymain.py

config.py 模块中保存了全局变量 ab。在 update.py 文件中,我们导入了 config.py 模块并改变了 ab 的值。同样,在 main.py 文件,我们导入了 config.pyupdate.py 模块。最后,我们打印并测试全局变量的值,无论它们是否被改变。

在嵌套函数中的全局变量

以下是如何在嵌套函数中使用全局变量。

示例 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

在上面的程序中,我们在一个嵌套函数 bar() 中声明了全局变量。在 foo() 函数中, 变量 x 没有全局关键字的作用。

调用 bar() 之前和之后, 变量 x 取本地变量的值,即 x = 20。在 foo() 函数之外,变量 x 会取在函数 bar() 中的值,即 x = 25。这是因为在 bar() 中,我们对 x 使用 global 关键字创建了一个全局变量(本地范围)。

如果我们在 bar() 函数内进行了任何修改,那么这些修改就会出现在本地范围之外,即 foo()


via: https://www.programiz.com/python-programming/global-keyword

作者:programiz 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

AI+Python数据分析...
教学大纲 01 课程性质和目的 数据分析与可视化为数据科学与大数据...
2026-05-06 20:23:25
什么是miniQMT,相比...
什么是miniQMT,相比大QMT有什么特点? 迅投 miniQM...
2026-01-22 09:51:16
Java、Python等开...
IT之家 9 月 24 日消息,开源安全基金会(OpenSSF)昨...
2025-09-24 14:25:34
python基础语法【迭代...
1.迭代器 1.什么是迭代器(iter)...
2025-06-01 20:30:55
手把手教你使用Flask框...
目录前言0、Flask框架的详细介绍一、Flask 框架封装接口1...
2025-06-01 17:11:00
【练习题】python函数...
写一个匿名函数,判断指定的年是否是闰年 (先直接用普...
2025-06-01 15:13:03

热门资讯

为什么计量 IT 的生产力如此... 在某些行业里,人们可以根据一些测量标准判定一个人的生产力。比如,如果你是一个零件制造商,可以通过一个...
硬核观察 #885 苹果 AR... 苹果 AR 眼镜被无限期推迟据报道,由于技术上的挑战,苹果公司已经无限期推迟了其轻型增强现实(AR)...
值得收藏的 27 个机器学习的... 机器学习 ( Machine Learning ) 有很多方面,当我开始研究学习它时,我发现了各种各...
PHP最佳实践(译) 简介PHP是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些bug。 每个版本都...
8 个提升你的隐私防护的开源密... 使用一些顶级开源密码管理器,确保你的登录凭证安全无虞。密码管理器是一项非常有用的实用程序。在你想寻找...
8个有趣的Linux提示与技巧... 我们时不时给你带来关于Linux的提示与技巧。和这个系列保持一致,这里有8个我们从读者收到最有趣的提...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
KDE4.11 Beta1 正...   KDE 项目工作组刚刚发布了 KDE Software Compilation 4.11 Bet...