在不同条件下在一行中接收不同数量的返回值

  • 本文关键字:返回值 条件下 一行 python
  • 更新时间 :
  • 英文 :


假设我有一个函数,它在不同的条件下返回不同数量的输出;例如

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)

但它很混乱。

不过,我同意这些评论,如果这是经常发生的事情,那么您的逻辑可能存在问题。函数应返回一致的类型(尤其是不要根据输入的值返回不一致的类型(。

最新更新