我是Python的新手,我有一个情况,我有一个代表模块内部函数的变量,我想知道如何动态调用它。我有filters.py
:
def scale(image, width, height):
pass
然后在另一个脚本中,我有类似的东西:
import filters
def process_images(method='scale', options):
filters[method](**options)
......但这显然不起作用。如果有人能够以正确的方式填写我这样做,或者让我知道是否有更好的方法将函数作为参数传递给那些很棒的。
答案 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是几个可能的图像处理操作的默认值,这并不是直观明显的。