Python3不要直接修改其他文件的变量
1.背景
在复习python3的课程中,学到购物车和ATM分为2个系统来写,所以少不了各模块间的导入,由于如商品列表等使用变量表示,导致很多文件都会import并修改值,原本以为变量在a文件里面,b和c导入之后并对a文件的变量做了修改,那么其他文件的调用的变量是修改后的,后面测试则不然。
尽管我们能够在某些情况下直接修改另一个文件中的变量,但是往往我们都不这样做。为什么呢?
以上所有疑问,下面用一个例子来解释。
2.原因
假设这里有3个文件,a,b,c,变量test在a里面,b,c文件都会有导入test变量并使其更改值。见下图。
以上代码可以总结出:(虽然不管函数里面是本地变量还是全局变量。)每个文件即使导入了变量并修改了变量,其它文件在导入变量的时候还是最初源文件导入的原始内存地址和值。
当然也最好建议不要这么做,这样的的问题就在于,这样的做法过于含糊了:无论是谁负责维护或重用第一个模块,都不一定知道有一个不知道在哪的模块位于导入链上可以修改X。实际上,第二个模块可能在完全不同的一个目录下,而且很难找到。
再者,这会让两个文件有过于强的相关性:因为它们都与变量test的值相关,如果没有其中一个文件的话很难理解或重用另一个文件。这种隐含的跨文件依赖性,在最好的情况下会导致代码不灵活,最坏的情况下会引发bug。
这里再说一次,最好的解决办法就是别这样做:在文件间进行通信最好的办法就是通过调用函数,传递参数,然后得到其返回值。