如何处理多功能过滤器



我有以下场景,其中我的大多数函数都需要根据条件返回不同的东西。

def get_root_path(is_cond_met=False):
    if is_cond_met:
        return "something"
    else
        return "something else"
def get_filename(is_cond_met=False):
    if is_cond_met:
        return "file name A"
    else
        return "file name B"

is_cond_met对于我调用的所有函数都是通用的。我刚刚在这里放了两个,但我有超过15个。

注意:实际函数包含复杂的逻辑,而不仅仅是返回几个硬编码的字符串

def get_root_path(is_cond_met=False):
    if is_cond_met:
        ## 
        ## Logic 
        ## 
        return "something"
    else
        #
        # Logic 
        #
        return "something else"

上面的代码是有效的,但是看起来并不是最佳的,也不是Python。有更好的解决方案吗?

您可以编写一个返回以下函数的函数:

def conditional(a, b, default=False):
    def cond(value=default):
        return a if value else b
    return cond
get_root_path = conditional("something", "something else")
get_filename = conditional("file name A", "file name B")

您可以使用以下几个通用函数将过滤函数有效地链接在一起:

from functools import partial

def check(condition, values):
    return values[int(condition)]
def chain(condition, values):
    return list(map(partial(check, condition), values))

root_paths = "something", "something else"
filenames = "file name A", "file name B"
values = [root_paths, filenames]
is_cond_met = False
result = chain(is_cond_met, values)
print(result)  # -> ['something', 'file name A']
is_cond_met = True
result = chain(is_cond_met, values)
print(result)  # -> ['something else', 'file name B']

最新更新