Python-基于字符串的导入模块,然后传递参数

2024-09-29 21:22:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我搜索了网页和这个网站,找不到这个问题的答案。我确信它就在我面前的某个地方,但找不到它。

我需要能够导入一个基于字符串的模块。然后在传递参数时在该模块中执行函数。

我可以基于字符串导入,然后使用eval()执行,但我知道这不是处理此问题的最佳方法。我似乎也不能那样传递论点。

基于字符串设置的当前模块名为TestAction.py,位于名为Tasks的文件夹中。 这是TestAction.py的内容:

def doSomething(var):
    print var

这是我正在执行的导入TestAction并执行的代码。

module = "Tasks.TestAction"
import Tasks
mymod = __import__(module)
eval(module + ".doSomething()")

如何使代码1不使用eval(),并将var参数传递给doSomething()

提前谢谢!


Tags: 模块字符串答案代码pyimport网页网站
3条回答

谢谢大家的帮助。看起来importlib和getattr是我需要的。这里是为我工作的确切代码,供以后参考。

module = "FarmTasks.TestAction"
mymod = importlib.import_module(module)

ds = getattr(mymod, "doSomething")
ds("stuff")

函数名也是变量吗?如果没有,请使用导入的模块:

mymod.doSomething('the var argument')

如果是,请使用getattr

fun = 'doSomething'
getattr(mymod, fun)('the var argument')

根据文件

it is better to use importlib.import_module() to programmatically import a module.

使用此选项,您可以按如下方式检索模块:

import importlib
TestAction = importlib.import_module("TestAction", package="Tasks")

之后,您可以简单地正常调用函数或按名称调用函数:

TestAction.some_known_function(arg1, arg2)
getattr(TestAction, "some_other_function_name")(arg1, arg2)

我希望这回答了你的问题,如果你还漏掉了什么,请详细说明。

相关问题 更多 >

    热门问题