函数名称作为另一个函数的输入?

时间:2011-07-28 14:12:01

标签: python

我是一个图像处理工程师,我使用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)

谢谢! 于连

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

是的,在python函数中是第一类对象,因此您可以将它们作为参数传递,就像任何其他数据类型一样。

答案 2 :(得分: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)