Python:仅导入模块部分函数时如何设置其命名空间全局变量
解决方法
首先明确:Python中模块只会被加载一次,第一次导入后会存入sys.modules缓存,后续任何形式的导入(包括import或from ... import)都只是引用已有的模块对象,不存在“重复导入”的性能问题。但如果你想避免显式写出import test_sub,同时只导入需要的test_func_a,可以用以下两种方案:
方案1:通过sys.modules获取已加载的模块对象
当你执行from test_sub import test_func_a时,test_sub模块已经被加载到sys.modules中了,直接从这里取出模块对象即可绑定变量,无需额外写import test_sub:
import sys from test_sub import test_func_a a = 'Hello, a' # 从缓存中获取test_sub模块 test_sub_mod = sys.modules['test_sub'] test_sub_mod.a = a test_func_a()
方案2:先导入模块,再提取目标函数
如果不介意先导入整个模块,但只想在当前命名空间保留需要的函数,可以这么写:
import test_sub # 仅将需要的函数引入当前命名空间 test_func_a = test_sub.test_func_a a = 'Hello, a' test_sub.a = a test_func_a()
关键逻辑说明
test_func_a是定义在test_sub模块的命名空间中的,它访问的a是模块级别的全局变量——不管你用哪种方式导入这个函数,它的作用域始终属于test_sub模块,所以必须把主脚本的a绑定到test_sub的命名空间中,这是你的预期设计决定的,无法绕开。
内容的提问来源于stack exchange,提问作者silence_of_the_lambdas
相关产品推荐
相关产品推荐

