2011-07-28 26 views
2

私は画像処理enginnerで、プロトタイプ言語としてPythonを使用しています。別の関数の入力としての関数名?

ほとんどの場合、「imagen.jpg」という名前の数千の画像が得られます.nはインクリメントです。

だから、私のプログラムの主な構造のように見えることがあります。あなたが別のアプリケーションから、それを見ることができるように

def main_IP(imgRoot, stop_ncrement): 
    name = update_the_increment(imgRoot, stop_increment) 
    img = load_the_image(name) 
    out_img = process_image(img) 
    displays_images(img, out_img) 
    return out_img 

、唯一の変化はprocess_image機能だろう。 process_imageを入力として挿入できる方法はありますか?

私は、一般的な機能を得るのプロトタイプです: main_IP(imgRoot、stop_increment、process_image)

感謝を! Julien

答えて

8

関数は、文字列や他のオブジェクトと同様にPythonで渡すことができます。

def processImage(...): 
    pass 

def main_IP(imgRoot, stop_ncrement, process_image): 
    name = update_the_increment(imgRoot, stop_increment) 
    img = load_the_image(name) 
    out_img = process_image(img) 
    displays_images(img, out_img) 
    return out_img 

main_IP('./', 100, processImage) 
+0

ありがとう!最後はあまり複雑ではない:) – jlengrand

2

はい、python関数はファーストクラスのオブジェクトなので、ほかのデータ型と同じようにパラメーターとして渡すことができます。ここで

1

呼び出したい関数の名前を渡して、そしてまた、あなたが呼び出したい関数への参照を渡すことを示していくつかのコードです:

def A(): 
    return "A!" 

def B(): 
    return "B!" 

def CallByName(funcName): 
    return globals()[funcName]() 

def CallByReference(func): 
    return func() 

print CallByName("A") 

functionB = B 
print CallByReference(functionB) 
関連する問題