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

时间:2010-07-06 22:06:12

标签: python

我是Python的新手,我有一个情况,我有一个代表模块内部函数的变量,我想知道如何动态调用它。我有filters.py

def scale(image, width, height):
    pass

然后在另一个脚本中,我有类似的东西:

import filters

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

......但这显然不起作用。如果有人能够以正确的方式填写我这样做,或者让我知道是否有更好的方法将函数作为参数传递给那些很棒的。

3 个答案:

答案 0 :(得分:13)

您需要内置getattr

getattr(filters, method)(**options)

答案 1 :(得分:10)

为避免此问题,您可以直接传递函数,而不是“按名称”:

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

如果您有特殊原因要使用字符串,则可以按照SilentGhost的建议使用getattr

答案 2 :(得分:0)

import filters

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

然后可以调用它,例如:

process_images(filters.rotate, **rotate_options)

请注意,使用默认函数arg似乎不是一个好主意 - 为什么filters.scale是几个可能的图像处理操作的默认值,这并不是直观明显的。