Python - 动态调用模块中的函数
我刚接触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所建议的那样。