我有以下场景,其中我的大多数函数都需要根据条件返回不同的东西。
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']