Python 如何导入模块(如果以前导入,则重新加载)

Python 如何导入模块(如果以前导入,则重新加载),python,import,module,python-3.4,Python,Import,Module,Python 3.4,我有一个模块my_module.py包含: var = 9 此模块是动态导入和修改的: import importlib def f(name): mod = importlib.import_module(name) importlib.reload(mod) return mod print(f(name='my_module').var) # Prints 9 # Changes var to 912 with open('my_module.py', '

我有一个模块
my_module.py
包含:

var = 9
此模块是动态导入和修改的:

import importlib

def f(name):
    mod = importlib.import_module(name)
    importlib.reload(mod)
    return mod

print(f(name='my_module').var)  # Prints 9

# Changes var to 912
with open('my_module.py', 'a+') as opened:
    opened.write('12')

print(f(name='my_module').var)  # Prints 912
My
f()
函数在确保重新加载模块对象后返回模块对象


它可以工作,但是我想知道是否有更好的方法来确保返回的模块对象总是被重新加载

您可以在通过hashlib重新加载之前计算并验证文件上的哈希值,或者如果库已更改,则只使用修改日期作为指示符。 或者,您可以在修改后发送一个信号,由信号处理程序执行实际的重新加载。
后者可能是最有效的,因为如果更改,库实际上只是重新加载。它甚至可以与散列相结合,以确保它实际上已被修改。

您通常可以依赖这样一个事实,即它将始终重新加载。否则,代码看起来很好。考虑到
importlib.reload
也会返回模块,这可能是
return importlib.reload(importlib.import\u module(name))
@jornsharpe我知道,但我认为函数可读性更高。你有“更好”的标准吗?当前的实现是否有什么特别困扰您的地方?@jornsharpe Speed。对于我测试过的模块,不必要的重新加载会使时间增加50%到100%。