根据传递的参数数量更改返回值的数量

时间:2018-08-28 15:30:13

标签: python python-3.x

是否有一种简短的方法可对参数元组*args执行操作,如果将单个参数传递给函数,则返回单个参数,否则返回参数元组?如以下示例所示

def transform(*args):
    if len(args) == 1:
        return args[0] + 1
    else:
        return tuple(arg + 1 for arg in args)

对于单个参数,您可以简单地调用transform而不进行额外的拆包:

x = transform(3)

以及多个参数:

a, b, c = transform(1, 2, 3)

其他选择是说始终采用Sized并返回Sized,

def transform_2(args):
    return tuple(arg + 1 for arg in args)

但这似乎使用户代码不那么直观:

x, = transform_2((3,))
a, b, c = transform_2((1, 2, 3))

还是这个解决方案更好?

1 个答案:

答案 0 :(得分:2)

总是 进行迭代的API更易于理解,并且不会给用户带来很大负担。

def transform(args):
    return tuple(arg + 1 for arg in args)

x = transform((3,))  # or transform([3])
a, b, c = transform([1,2,3])

任何尝试做您想做的事情的尝试都会失败,如果您尝试传递一个字符串,因为您可能打算foo("123")返回一个值,而不是{的结果{1}},foo("1")foo("2"),但是没有明确测试foo("3"),您将无法区分字符串参数和另一个可迭代的参数。