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

时间:2018-08-20 13:45:16

标签: 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)

我的问题是,我可以将四行以上的权利缩小为一行吗?

2 个答案:

答案 0 :(得分:1)

您可以使用在Python 2.5版中添加的三元表示法。您可以阅读有关这些here

的更多信息

首先评估resource "aws_launch_configuration" "lc_name" { name = "lc_name" image_id = "ami-035d01348bb6e6070" instance_type = "m3.large" security_groups = ["sg-61a0b51b"] } #################### # Autoscaling group #################### resource "aws_autoscaling_group" "as_group_name" { name = "as_group_name" launch_configuration = "${aws_launch_configuration.lc_name.name}" vpc_zone_identifier = ["subnet-be1088f7", "subnet-fa8d6fa1"] min_size = "1" max_size = "1" desired_capacity = "1" load_balancers = ["${aws_elb.elb_name.name}"] health_check_type = "EC2" } ,然后返回if or else结果。因此,您可以像这样重写函数。

condition

但是,就像在评论中已经提到的那样,我建议不要从单个函数返回多种不同类型的结果。总是返回def fun(cond, x, y): return (x, y) if cond == 'A' else y 或返回单个值。

答案 1 :(得分:-1)

我想说最好的方法是返回一个包含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)

但是很乱。

我同意这些意见,如果这件事经常发生,那么您的逻辑可能存在问题。函数应返回一致的类型(尤其是不返回不一致的类型,具体取决于输入的 value )。