1

我有一个脚本可以导入一个模块,该模块具有我想稍微改变的功能。假设该模块具有功能divide和run_program:

def _divide(var):
    return 1/var

run_program(x):
    do some stuff
    _divide(x)
    do more stuff

相反,我希望它这样做

def divide(var):
    if var == 0:
        var = 1e-131
    return 1/var

    run_program(x):
        do some stuff
        _divide(x)
        do more stuff

我现在更改了模块中的功能。但是,如果我想在其他地方运行程序,我也需要更改那里的模块。因为我要更改的函数是从模块内调用的,所以我无法覆盖它(据我所知)。我可以从我的脚本中更改函数,这样我就不必更改已安装的模块吗?


编辑:模块是https://pypi.python.org/pypi/dirichlet/0.7功能是:

def _init_a(D):
'''Initial guess for Dirichlet alpha parameters given data D'''
    E = D.mean(axis=0)
    E2 = (D**2).mean(axis=0)
    return ((E[0] - E2[0])/(E2[0]-E[0]**2)) * E
4

1 回答 1

3

您可以在 Python 中动态替换函数:

import module

old_divide = module._divide

def new_divide(var):
    if var == 0:
        var = 1e-131
    return old_divide(var)

module._divide = new_divide

run_program被调用时,它将使用替换函数;查找_divide是在run_program调用时完成的,而不是在加载模块时完成的。

于 2013-10-09T10:52:52.087 回答