【Python 】带你快速认识 Global 关键字

  

HoRain云小助手:个人主页

  个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

前言

一、作用域基础

(一)局部作用域(Local Scope)

(二)全局作用域(Global Scope)

二、global 关键字的定义和作用

(一)使用 global 关键字修改全局变量

(二)global 关键字的必要性

三、使用场景

(一)状态维护

(二)共享资源

(三)全局常量和全局变量

四、注意事项

(一)避免滥用

(二)可维护性和可测试性

(三)替代方案

五、总结


前言

在 Python 编程中,global 关键字是一个非常重要的概念,它在处理函数内部和外部变量的作用域问题时发挥着关键作用。对于初学者来说,理解 global 关键字可能会有些困难,但一旦掌握,它将为你打开新的编程思路和解决问题的方法。本文将深入探讨 global 关键字的定义、使用场景、注意事项及最佳实践,带你快速了解其在 Python 中的重要性。

一、作用域基础

在深入了解 global 关键字之前,我们需要先回顾一下 Python 中的作用域概念。作用域决定了变量的可见性和生命周期,即变量在程序中可以被访问和修改的范围。Python 主要有以下几种作用域:

(一)局部作用域(Local Scope

局部作用域是指在函数内部定义的变量的作用范围。这些变量只能在该函数内部被访问和修改,函数外部的代码无法直接访问它们。例如:

def my_function():
    local_variable = 10
    print(local_variable)

my_function()
# 下面这行代码会报错,因为 local_variable 是局部变量,无法在函数外访问
# print(local_variable)

在上述代码中,local_variable 是在 my_function 函数内部定义的,因此它是一个局部变量,其作用域仅局限于该函数内部。

(二)全局作用域(Global Scope

全局作用域是指在函数外部定义的变量的作用范围。这些变量可以在程序的任何位置被访问,包括在函数内部,但有一个重要的前提:如果在函数内部要修改全局变量,需要特别小心,这就是 global 关键字发挥作用的地方。例如:

global_variable = 20

def my_function():
    print(global_variable)

my_function()
print(global_variable)

在这个例子中,global_variable 是一个全局变量,所以可以在 my_function 函数内部和外部被访问。

二、global 关键字的定义和作用

global 关键字用于在函数内部声明一个变量是全局变量,而不是局部变量。当你在函数内部使用 global 关键字声明一个变量时,你实际上是在告诉 Python 解释器,你要使用的是在函数外部定义的全局变量,而不是创建一个新的局部变量。这样,你就可以在函数内部对该全局变量进行修改。

(一)使用 global 关键字修改全局变量

以下是一个使用 global 关键字的示例:

count = 0

def increment():
    global count
    count += 1
    print(count)

increment()
increment()
print(count)

 increment 函数中,global count 语句告诉 Python 解释器,我们要使用的是全局变量 count,而不是创建一个新的局部变量。因此,每次调用 increment 函数时,全局变量 count 的值都会增加 1。

(二)global 关键字的必要性

如果在函数内部直接对一个全局变量进行赋值操作,而没有使用 global 关键字,Python 会认为你在创建一个新的局部变量,而不是修改全局变量。例如:

counter = 0

def wrong_increment():
    # 这将创建一个新的局部变量 counter,而不是修改全局变量
    counter = counter + 1
    print(counter)

wrong_increment()
print(counter)

在 wrong_increment 函数中,由于没有使用 global 关键字,counter = counter + 1 会创建一个新的局部变量 counter,而不是修改全局变量。因此,全局变量 counter 的值不会改变,并且在执行 wrong_increment 函数时会引发 UnboundLocalError,因为局部变量 counter 在赋值之前被引用。

三、使用场景

(一)状态维护

在某些情况下,你可能希望在函数调用之间维护一个状态。例如,一个计数器,每次调用函数时,计数器的值会发生变化。使用 global 关键字可以方便地实现这一点。

total = 0

def add_to_total(value):
    global total
    total += value
    return total

print(add_to_total(5))
print(add_to_total(10))
print(add_to_total(15))

在这个例子中,total 变量作为一个全局状态被维护,每次调用 add_to_total 函数时,它的值会不断累加。

(二)共享资源

当多个函数需要共享一个资源时,也可以使用全局变量和 global 关键字。例如,一个程序中的配置信息,多个函数可能需要访问和修改这些信息。

config = {'debug': False}

def enable_debug():
    global config
    config['debug'] = True

def is_debug_enabled():
    global config
    return config['debug']

enable_debug()
print(is_debug_enabled())

在上述代码中,config 作为全局变量存储了程序的配置信息,enable_debug 函数可以修改配置,而 is_debug_enabled 函数可以读取配置。

(三)全局常量和全局变量

除了修改全局变量,你也可以使用 global 关键字在函数内部访问全局常量。虽然 Python 没有真正的常量,但我们可以将某些变量视为常量,只进行读取操作。

PI = 3.14159

def calculate_area(radius):
    global PI
    area = PI * (radius ** 2)
    return area

print(calculate_area(2))

 calculate_area 函数中,我们使用 global PI 来访问全局常量 PI,并计算圆的面积。

四、注意事项

(一)避免滥用

过度使用 global 关键字会使代码难以理解和维护,因为它打破了函数的封装性。通常情况下,函数应该只依赖于输入参数和返回值,而不是全局变量。尽量将函数设计为纯函数(不依赖或修改外部状态),只有在确实需要共享状态或资源时才使用 global 关键字。

(二)可维护性和可测试性

使用 global 关键字可能会降低代码的可维护性和可测试性。由于全局变量可以在程序的任何地方被修改,追踪错误和测试函数可能会变得更加困难。在测试使用 global 关键字的函数时,需要确保全局变量处于正确的状态,这可能会导致测试代码变得复杂。

(三)替代方案

对于一些情况,可以考虑使用函数参数和返回值来传递信息,而不是使用全局变量。例如:

def add(a, b):
    return a + b

result = add(3, 5)
print(result)

对于需要共享状态的情况,可以使用类和对象来封装状态。例如:

class Counter:
    def __init__(self):
        self.count = 0

    def increment(self):
        self.count += 1
        return self.count

counter = Counter()
print(counter.increment())
print(counter.increment())

在这个类的实现中,count 是一个实例变量,通过 Counter 类的实例来维护状态,避免了使用全局变量。

五、总结

global 关键字是 Python 中一个强大但需要谨慎使用的工具。它允许我们在函数内部修改全局变量,从而实现一些需要共享状态或维护全局信息的功能。然而,为了代码的可维护性、可测试性和清晰性,我们应该谨慎使用 global 关键字,优先考虑使用函数参数、返回值、类和对象等替代方案。只有在确实需要在函数之间共享状态或资源时,才使用 global 关键字,并确保代码的逻辑清晰易懂。

通过对 global 关键字的学习,你可以更好地掌握 Python 中的变量作用域,写出更健壮、更易于维护的代码。在实际编程中,根据具体情况合理使用 global 关键字,避免因滥用而导致的代码混乱和难以调试的问题。希望本文能够帮助你在 Python 编程之旅中更加得心应手,合理运用 global 关键字,提升代码的质量和性能。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!

如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!

Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!

你可能感兴趣的:(python,前端)