在我的函数中,我有一个列表params_to_opt
,其中可以包含以下任意一项:'a'
,'b'
,'c'
,'d'
,{{ 1}}。
示例:'e'
。它可以包含我指定的任意数量(1到5)的条目。它始终至少包含以上条目之一。
根据此输入,我进行各种计算:
params_to_opt=['c', 'e', 'a']
现在我只想返回那些计算出的值。例如,如果def MyFunction(params_to_opt):
if 'a' in params_to_opt:
out1 = ...
if 'b' in params_to_opt:
out2= ...
if 'c' in params_to_opt:
out3 = ...
if 'd' in params_to_opt:
out4= ...
if 'e' in params_to_opt:
out5 = ...
,我将返回params_to_opt=['c', 'e', 'a']
,out1
和out3
。
问题是,如果我再次使用if .. else语句,我将不得不考虑31种可能的输出(5 + 10 + 10 + 5 + 1,具体取决于列表的长度)。
有没有一种更优雅的编码方式?我不在乎性能,因为与计算每个out1,out2,out3,out4,out5的时间相比,输出数量很少。
谢谢, 米哈伊尔
答案 0 :(得分:5)
不需要五个自变量;只需声明一个列表,然后根据需要追加到列表即可。
def MyFunction(params_to_opt):
results = []
if 'a' in params_to_opt:
results.append(...)
if 'b' in params_to_opt:
results.append(...)
if 'c' in params_to_opt:
results.append(...)
if 'd' in params_to_opt:
results.append(...)
if 'e' in params_to_opt:
results.append(...)
return results
答案 1 :(得分:1)
这是另一种解决方案,您可以避免连续使用多个if语句,这在某些时候可能很难维护。
l = ['a', 'b']
l2 = ['a', 'c', 'e']
output = {
'a': 'out1',
'b': 'out2',
'c': 'out3',
'd': 'out4',
'e': 'out5',
}
def MyFunction(params_to_opt):
return [output.get(param) for param in sorted(params_to_opt)]
print(MyFunction(l), end='\n') # ['out1', 'out2']
print(MyFunction(l2)) # ['out1', 'out3', 'out5']
您可以将所需的内容放在字典中:字符串,函数,条件等
答案 2 :(得分:1)
或者,您也可以使用生成器(和字典):
dictionary = {'a': 'alpha', 'b': 'beta'}
def MyFunction(params_to_opt):
for param in params_to_opt:
if param in dictionary:
yield dictionary[param]
result = [x for x in MyFunction(['a', 'b'])]
我已经使用了简单的a和b作为输入,但是显然可以进行调整。