假设我有一个函数,它在不同的条件下返回不同数量的输出;例如
def _fn(cond):
....
if cond is 'A':
return x, y
else:
return y
获取_fn
输出的方法如下:
if cond is 'A':
x_out, y_out = _fn(cond)
else:
y_out = _fn(cond)
我的问题是我可以将上面的四行减少为一行吗?
您可以使用在python版本2.5中添加的三元表示法。您可以在此处阅读有关这些内容的更多信息
首先计算condition
,然后返回 if 或 else 结果。所以你可以像这样重写你的函数。
def fun(cond, x, y):
return (x, y) if cond == 'A' else y
但是,就像评论中已经提到的,我建议不要从单个函数返回多种不同类型的结果。要么始终返回tuple
,要么返回单个值。
我会说最好的方法是返回一个包含None
的元组
def wrap_fn(cond):
res = _fn(cond)
if cond == 'A': # or test isinstance(res, tuple)
return res
return None, res
用作
x_out, y_out = wrap_fn(cond)
# then do your code
if x_out is None:
...
else:
...
您可以在一行中执行此操作
x_out, y_out = (None, _fn(cond)) if cond == 'A' else _fn(cond)
但它很混乱。
不过,我同意这些评论,如果这是经常发生的事情,那么您的逻辑可能存在问题。函数应返回一致的类型(尤其是不要根据输入的值返回不一致的类型(。