假设我有一个在不同条件下返回不同数量输出的函数;例如
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)
我的问题是,我可以将四行以上的权利缩小为一行吗?
答案 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 )。