Python 作用域与嵌套函数深入解析
1. 跨文件变量修改问题
在 Python 中,跨文件修改变量是可行的,但往往会带来一些问题。例如,第二个模块可能位于完全不同的目录,很难被注意到。这种跨文件的变量修改会在两个文件之间建立过强的耦合,因为它们都依赖于变量的值,这使得理解或复用其中一个文件而不依赖另一个变得困难。这种隐式的跨文件依赖,往好里说会导致代码缺乏灵活性,往坏里说会引发错误。
解决方案
最好的做法通常是避免这种跨文件的直接修改。跨文件通信的最佳方式是调用函数,传入参数并获取返回值。以下是一个示例:
# first.py
X = 99
def setX(new): # 访问器使外部修改显式化
global X # 并且可以在一个地方管理访问
X = new
# second.py
import first
first.setX(88) # 调用函数而不是直接修改
这种方式虽然需要更多的代码,但在可读性和可维护性方面有很大的提升。当阅读第一个模块时,看到函数就知道它是一个接口点,并且可以预期到对 X 的修改。
其他访问全局变量的方式
由于全局作用域的变量会变成加载模块对象的属性,我们可以通过导入封闭模块并对其属性进行赋值来模拟 global 语句。示例如下:
# thismod.p
超级会员免费看
订阅专栏 解锁全文
54

被折叠的 条评论
为什么被折叠?



