Python - 动态调用模块中的函数

13 投票
3 回答
10645 浏览
提问于 2025-04-16 00:54

我刚接触Python,遇到一个情况,就是我有一个变量代表一个模块里的函数,我想知道怎么动态调用它。我有一个叫filters.py的文件:

def scale(image, width, height):
    pass

然后在另一个脚本里,我有类似这样的代码:

import filters

def process_images(method='scale', options):
    filters[method](**options)

... 但显然这样是不行的。如果有人能告诉我正确的方法,或者有没有更好的方式来传递函数作为参数,那就太好了。

3 个回答

0
import filters

def process_images(function=filters.scale, options):
    function(**options)

这段代码可以像这样调用,例如:

process_images(filters.rotate, **rotate_options)

需要注意的是,设置一个默认的函数参数似乎不是个好主意——因为在多个可能的图像处理操作中,为什么 filters.scale 是默认的并不容易理解。

27

你需要用到内置的 getattr 函数:

getattr(filters, method)(**options)
9

为了避免这个问题,你可以直接传递函数,而不是通过“名字”来传递:

def process_images(method=filters.scale, options):
    method(**options)

如果你有特别的理由想用字符串来传递,可以使用 getattr,正如SilentGhost所建议的那样。

撰写回答