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

13

我对Python还不太熟悉,我有一个变量代表模块中的一个函数,我想知道如何动态调用它。 我有一个filters.py

def scale(image, width, height):
    pass

然后在另一个脚本中,我有类似这样的内容:

import filters

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

...但这显然行不通。如果有人能告诉我正确的方法,或者让我知道传递函数作为参数的更好方法,那就太棒了。

3个回答

27

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

getattr(filters, method)(**options)

这应该是最佳答案。 - Faisal Julaidan

9
为了避免这个问题,您可以直接传递函数,而不是“按名称”传递:
def process_images(method=filters.scale, options):
    method(**options)

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


0
import filters

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

这可以像下面这样调用:

process_images(filters.rotate, **rotate_options)

请注意,设置默认的函数参数似乎不是一个好主意——在多种图像处理操作中,默认选用filters.scale并不直观。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接