初识Python: global关键字

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

[[226693]]

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

global 关键字简介

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

global 关键字的规则

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

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

使用 global 关键字(含示例)

我们来举个例子。 

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

  1. c = 1 # 全局变量
  2. def add():
  3. print(c)
  4.  
  5. add()

运行程序,输出为:

  1. 1

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

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

  1. c = 1 # 全局变量
  2. def add():
  3. c = c + 2 # c 增加 2
  4. print(c)
  5. add()

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

  1. UnboundLocalError: local variable 'c' referenced before assignment

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

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

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

  1. c = 0 # global variable
  2.  
  3. def add():
  4. global c
  5. c = c + 2 # c 增加 2
  6. print("Inside add():", c)
  7.  
  8. add()
  9. print("In main:", c)

运行程序,输出为:

  1. Inside add(): 2
  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 文件来存储全局变量

  1. a = 0
  2. b = "empty"

创建 update.py 文件来改变全局变量

  1. import config
  2.  
  3. config.a = 10
  4. config.b = "alphabet"

创建 main.py 文件来测试其值的变化

  1. import config
  2. import update
  3.  
  4. print(config.a)
  5. print(config.b)

运行 main.py,输出为:

  1. 10
  2. alphabet

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

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

在嵌套函数中的全局变量

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

示例 5:在嵌套函数中使用全局变量

  1. def foo():
  2. x = 20
  3. def bar():
  4. global x
  5. x = 25
  6.  
  7. print("Before calling bar: ", x)
  8. print("Calling bar now")
  9. bar()
  10. print("After calling bar: ", x)
  11.  
  12. foo()
  13. print("x in main : ", x)

输出为:

  1. Before calling bar: 20
  2. Calling bar now
  3. After calling bar: 20
  4. x in main : 25

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

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

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

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2009-12-03 19:06:44

PHP关键字globa

2013-01-30 10:12:14

Pythonyield

2022-05-06 08:32:40

Pythonwith代码

2020-08-23 11:03:24

Python开发void

2022-01-04 16:35:42

C++Protected关键字

2009-09-02 09:24:03

C# this关键字

2012-03-01 12:50:03

Java

2009-09-17 09:30:00

Linq LET关键字

2009-08-21 14:58:56

C# this关键字

2022-06-29 08:05:25

Volatile关键字类型

2022-02-17 08:31:38

C语言staic关键字

2019-11-06 10:36:43

MavenoptionalJava

2021-02-01 13:10:07

Staticc语言UNIX系统

2009-08-13 13:04:29

C# lock关键字

2022-01-10 18:11:42

C语言应用技巧

2011-06-14 13:26:27

volatile

2021-08-06 07:51:47

关键字int函数

2009-08-26 15:16:29

C# lock关键字

2019-12-20 15:19:41

Synchroinze线程安全

2009-08-06 17:52:23

C#增加that关键字
点赞
收藏

51CTO技术栈公众号