将模块传递给 python 中的调用函数

Pass a module to a called function in python

我有以下问题:

假设我有一个文件 function.py 包含:

def get_mean(nums):
    return np.mean([nums])

和包含以下内容的文件 launcher.py

from function import get_mean

mean = get_mean([1, 2, 3])
print(mean)

现在,如果您启动 python launcher.py,它将抛出 NameError: name 'np' is not defined

我的问题是:有没有办法通过从 launcher.py 调用函数 get_mean 而无需编辑文件 function.py

背景故事:第三方库在这里有一个函数 function.py 表示错误导入,我必须在我的代码中使用 launcher.py 表示的函数,但我没有不知道怎么做。

不编辑是不可能的function(),因为文件已经有错误(np未定义)。

但是,你可以试试 function.py:

def get_mean(nums):
    import numpy as np
    return np.mean([nums])

您也可以从启动器发送 np 以像这样运行:

#function.py
def get_mean(nums, np):
    return np.mean([nums])
#launcher.py
import numpy as np
from function import get_mean
mean = get_mean([1, 2, 3],np)
print(mean)

这两个都有这个输出:

2.0

可以通过一个奇怪的技巧来做到这一点

import numpy as np
import function
function.__dict__["np"] = np
function.get_mean([1, 2, 3])

您正在定义未定义的模块,方法是将其添加到 functions 模块的 __dict__ 中。

这不是一种非常干净的做事方式,但这是我这边唯一可用的方法