python3全局关键字global – Python3教程

上一章Python教程请查看:python3全局变量、局部变量和非局部变量

在本文中,你将了解全局关键字、全局变量以及何时使用全局关键字。

在阅读本文之前,请确保你已经掌握了Python全局变量、局部变量和非局部变量的一些基础知识。

全局关键字介绍

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

全局关键字规则

Python中全局关键字的基本规则是:

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

使用全局关键字(示例)

举个例子。

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

c = 1 # 全局变量

def add():
    print(c)

add()

但是,在某些情况下,我们可能需要从函数内部修改全局变量。

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

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

add()

当我们运行上述程序时,输出显示一个错误:

UnboundLocalError: local variable 'c' referenced before assignment

这是因为我们只能访问全局变量,而不能从函数内部修改它。

解决方案是使用全局关键字。

示例3:使用全局变量从函数内部更改全局变量

c = 0 # 全局变量

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

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

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

然后,我们把变量c增加1 也就是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.py和main.py。

config.py模块存储a和b的全局变量,在update.py文件中,我们导入config.py模块并修改a和b的值。类似地,在main.py文件中,我们同时导入config.py和update.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)

在上面的程序中,我们在嵌套的函数bar()中声明全局变量,在foo()函数中,x对全局关键字没有影响。

在调用bar()之前和之后,变量x取局部变量i的值。e x = 20。在foo()函数之外,变量x将接受bar()函数i中定义的值。e x = 25。这是因为我们在x中使用了global关键字来在bar()函数(局部作用域)中创建全局变量。

如果我们在bar()函数中做了任何更改,那么这些更改就会出现在局部作用域之外,即foo()。

来源:

https://www.srcmini02.com/2545.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?