2010-07-06 14 views
8

我對Python很新,我有一個情況,我有一個變量表示模塊內部的函數,我想知道如何動態調用它。我有filters.pyPython - 動態調用模塊中的函數

def scale(image, width, height): 
    pass 

然後在另一個腳本我有類似:

import filters 

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

...但是,這並不明顯工作。如果有人能夠以適當的方式填補我的空缺,或者讓我知道是否有更好的方式來傳遞函數作爲一個非常棒的參數。

回答

10

爲了避免這個問題,你可以直接傳遞給函數,而不是「按名稱」:

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

如果你有一個特殊的原因要使用字符串,可以使用SilentGhost建議的getattr

+0

完美 - 謝謝! – 2010-07-06 22:36:44

11

你需要內置getattr

getattr(filters, method)(**options) 
+0

太棒了,謝謝! – 2010-07-06 22:37:05

0
import filters 

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

這可以被稱爲像,例如:

process_images(filters.rotate, **rotate_options) 

注意,有一個默認功能ARG似乎不是一個好主意 - 爲什麼filters.scale是它不是非常直觀幾種可能的圖像處理操作中的默認設置。