gpt4 book ai didi

Python - 如何为许多类似结构的函数创建通用批处理函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:21 24 4
gpt4 key购买 nike

如果之前有人问过这个问题,我深表歉意,但我不完全确定如何阐明这个问题。

我创建了一组结构非常相似的函数,它们使用 PIL 对图像执行操作。在某些情况下,它们的内部工作原理有所不同,但它们都接受完全相同的参数:图像的路径和输出目录的路径。

在某些情况下,我希望能够在单个图像上调用此函数,但有时我也希望将一个装满图像的文件夹传递给它,并让它在所有图像上发挥其魔力。

我的问题是:是否可以编写一个通用批处理函数,该函数将根据其输入调用另一个函数?本质上,我希望能够输入函数 A、函数 B 或函数 C 作为函数 D 的参数,并由函数 D 调用它。

编辑:以下是我拥有的两个函数的一些示例:

def desaturate(in_img, out_dir):
im = Image.open(in_img)
converter = PIL.ImageEnhance.Color(im)
im2 = converter.enhance(0)
im2.save(out_dir + r"\\" + splitext(basename(in_img))[0] + "_desaturate.tiff")

def save_as_tiff(in_img, out_dir):
im = Image.open(in_img)
im.save(out_dir + r"\\" + splitext(basename(in_img))[0] + ".tiff")

那么我想要一个通用函数,它接受文件夹路径作为其第一个参数,然后接受所需的函数作为第二个参数。有没有办法接受字符串作为参数,然后让它以某种方式将其转换为函数调用?

最佳答案

如果我理解你的问题,你想要处理目录树中的一堆文件,并且你希望该目录处理函数是通用的,以工作函数作为参数来处理每个图像。

如果这是正确的,下面是一个简化的示例:

import os
import sys

def directory_processor(source_dir, out_dir, worker_func, *xs, **kws):
for root, dirs, files in os.walk(source_dir):
for f in files:
in_img = os.path.join(root, f)
worker_func(in_img, out_dir, *xs, **kws)


# One of your image-processing functions.
def desaturate(in_img, out_dir, *xs, **kws):
print 'desaturating', in_img, out_dir, xs, kws

# To experiment with this script, pass the source_dir and
# out_dir as command-line arguments.
directory_processor(sys.argv[1], sys.argv[2], desaturate, 'blort', foo = 1)

请注意,我在函数签名中包含了 *xs, **kws,这将允许您根据需要将任意位置和关键字参数传递给图像处理函数。

关于您的具体问题(有没有办法接受字符串作为参数,然后让它以某种方式将其转换为函数调用?):通常不需要这样做;您可以将函数本身(而不是字符串名称)传递给另一个函数,如上所示。

关于Python - 如何为许多类似结构的函数创建通用批处理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28521840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com