在以下情况下,大多数函数需要根据条件返回不同的内容。
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>
<canvas id="canvas"></canvas>
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"
对于我正在调用的所有功能将是通用的。我刚刚在这里放了两个,但是我已经超过15个了。
注意:实际函数包含复杂的逻辑,而不仅仅是返回几个硬编码的字符串。
is_cond_met
上面的代码有效,但是似乎不是最佳的或pythonic。有更好的解决方案吗?
答案 0 :(得分:0)
您可以编写一个返回此类函数的函数:
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")
答案 1 :(得分:0)
您可以使用以下几个通用函数将过滤器函数有效地链接在一起:
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']