首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 选择易懂的名称
4.1 命名风格
4.2 PEP 8 的命名风格
4.3 适当的名称长度
4.3.1 太短的名称
4.3.2 太长的名称
4.4 起易于搜索的名称
4.5 避免笑话、双关语和需要文化背景才能理解的词汇
4.6 不要覆盖内置名称
4.7 史上最差的变量名
第5章 揪出代码的坏味道
5.1 重复的代码
5.2 魔数
5.3 注释掉的代码和死代码
5.4 打印调试
5.5 带有数字后缀的变量
5.6 本该是函数或者模块的类
5.7 嵌套列表解析式
5.8 空的except块和糟糕的错误信息
5.9 代码坏味道的谬误
5.9.1 谬误:函数应该仅在末尾处有一个return语句
5.9.2 谬误:函数最多只能有一个try语句
5.9.3 谬误:使用flag参数不好
5.9.4 谬误:全局变量不好
5.9.5 谬误:注释是不必要的
第6章 编写Python 风格的代码
6.1 Python 之禅
6.2 学着喜欢强制缩进
6.3 使用timeit模块衡量性能
6.4 常被误用的语法
6.4.1 使用enumerate()而不是range()
6.4.2 使用with 语句代替open()和close()
6.4.3 用is 跟None 做比较而不用==
6.5 格式化字符串
6.5.1 如果字符串有很多反斜杠,请使用原始字符串
6.5.2 使用f-string 格式化字符串
6.6 制作列表的浅副本
6.7 以Python 风格使用字典
6.7.1 在字典中使用get()和setdefault()
6.7.2 使用collections.defaultdict()设置默认值
6.7.3 使用字典代替switch 语句
6.8 条件表达式:Python“丑陋”的三元运算符
6.9 处理变量的值
6.9.1 链式赋值和比较运算符
6.9.2 验证变量是否为多个值中的一个
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(二)
小册名称:Python编程轻松进阶(二)
### 5.9.4 谬误:全局变量不好 在Python编程的广阔天地中,全局变量常常是一个引发争议的话题。许多初学者乃至有一定经验的开发者,都倾向于将“全局变量不好”视为一条金科玉律。然而,这一观点实则包含了一种简化和偏见的谬误。全局变量并非天生邪恶,它们的使用与否,关键在于如何恰当地管理和使用它们。本章节旨在深入探讨全局变量的利弊,揭示其在实际编程中的合理应用场景,以及如何通过最佳实践来避免常见的陷阱。 #### 一、全局变量的定义与误解 全局变量,顾名思义,是在函数或程序的其他部分之外定义的变量,其作用域贯穿整个程序。这意味着,在程序的任何地方(除非被局部作用域中的同名变量所遮蔽),都可以访问和修改这些变量。这种特性使得全局变量在跨函数或模块共享数据时显得尤为方便。 然而,正是这种“方便”的特性,也导致了人们对全局变量的诸多误解和批评。常见的误解包括: 1. **难以追踪和调试**:全局变量可以被程序中的任何部分修改,这增加了跟踪变量状态变化的难度,使得调试变得复杂。 2. **增加耦合度**:过度使用全局变量会导致程序各模块之间的紧密耦合,降低代码的可维护性和可扩展性。 3. **命名空间污染**:在大型项目中,不加节制地使用全局变量可能导致命名空间混乱,增加命名冲突的风险。 #### 二、全局变量的合理应用场景 尽管存在上述误解,但全局变量在特定场景下仍然有其不可替代的作用。以下是一些合理的应用场景: 1. **配置管理**:在应用程序启动时,读取配置文件并将配置项作为全局变量存储,可以方便地在程序任何地方访问这些配置信息,而无需通过参数传递。 2. **状态共享**:在某些应用中,如多线程或多进程程序中,全局变量可以用来在不同线程或进程间共享状态信息。当然,此时需要注意线程安全问题。 3. **单例模式实现**:在某些情况下,可能需要确保程序中某个类的实例全局唯一。此时,可以使用全局变量来存储这个实例的引用。 4. **常量定义**:将程序中不会改变的常量(如π的值、地球半径等)定义为全局变量,可以避免在多个地方重复定义,同时便于统一管理和修改。 #### 三、全局变量的最佳实践 为了避免全局变量带来的问题,我们可以遵循以下最佳实践: 1. **最小化使用**:尽可能减少全局变量的使用,只在确实需要时才使用它们。优先考虑通过函数参数、返回值或类属性来传递和共享数据。 2. **封装与隔离**:将全局变量封装在模块或类中,通过访问器(getter)和修改器(setter)方法来控制对全局变量的访问,减少直接访问全局变量的机会。这样可以降低外部代码对全局变量的依赖,提高代码的封装性。 3. **命名规范**:为全局变量选择具有描述性的命名,并遵循项目或团队的命名规范。这有助于其他开发者理解全局变量的用途和目的,减少命名冲突的风险。 4. **文档注释**:对全局变量进行充分的文档注释,说明其用途、作用域、修改限制等信息。这有助于其他开发者在使用和维护代码时更好地理解全局变量的行为。 5. **测试与验证**:在开发过程中,对涉及全局变量的代码进行充分的测试,确保它们的行为符合预期。特别是要注意检查全局变量在不同情况下的状态变化,以及它们对程序其他部分的影响。 6. **替代方案评估**:在决定使用全局变量之前,先评估是否有更合适的替代方案(如使用类属性、模块级变量、上下文管理器、依赖注入等)。通过比较不同方案的优缺点,选择最适合当前需求的方案。 #### 四、结论 全局变量并非洪水猛兽,它们的存在有其合理性和必要性。然而,这并不意味着我们可以无节制地使用它们。相反,我们应该通过遵循最佳实践来避免全局变量带来的问题,并充分利用它们带来的便利。正如任何技术工具一样,全局变量的好坏取决于我们如何使用它们。只有当我们真正理解并掌握了全局变量的使用方法和限制时,才能在实际编程中做到游刃有余、得心应手。
上一篇:
5.9.3 谬误:使用flag参数不好
下一篇:
5.9.5 谬误:注释是不必要的
该分类下的相关小册推荐:
Python合辑11-闭包函数
Python机器学习实战
Python合辑9-判断和循环
剑指Python(万变不离其宗)
Python爬虫入门与实战开发(上)
Python编程轻松进阶(五)
Python神经网络入门与实践
Python甚础Django与爬虫
Python编程轻松进阶(四)
Python爬虫入门与实战开发(下)
Python合辑7-集合、列表与元组
Python合辑10-函数