您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

直接导入变量所产生的值不同于在Python中导入其模块所产生的值

直接导入变量所产生的值不同于在Python中导入其模块所产生的值

两者之间确实有区别

from mymodule import obj
(...)
do_something_with(obj)

import mymodule
(...)
do_something_with(mymodule.obj)

在第一种情况下,它的作用是:

 import mymodule
 obj = mymodule.obj
 del mymodule

这意味着,在这一点上,目前的模块中,obj一个“全球性”(这在Python实际上意味着“模块级”,而不是“应用程序范围”)的名字必将无论mymodule.obj当它被导入 (以你的情况:None)。从那时起,mymodule.obj模块本地obj名称生活在不同的命名空间中(第一个mymodule命名空间中,第二个在当前模块命名空间中),并且mymodule.obj从任何地方重新绑定都不会改变当前模块obj所绑定的内容。实际上,这就像您在执行此操作一样:

a = 2
b = a
a = 4

第三条语句之后,b显然仍势必2-重新绑定a4不影响b

在第二种情况(import mymodule)中,导入模块的名称空间中绑定的是整个mymodule对象,因此,如果发生mymodule.obj反弹(从内部mymodule或其他任何地方),则更改将在导入模块中可见。在这种情况下,它相当于

a = {"x": 2}
b = a
a["x"] = 4

在这种情况下,更改也将可见,b["x"]因为a并且b仍然绑定到同一对象。

wrt /您的另一个问题:是的,拥有一些“ config”对象是很常见的模式。您可能只想确保您也可以“从头开始”构建它(我的意思是,不一定从配置文件构建),以使单元测试更加容易。

python 2022/1/1 18:33:22 有412人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶