是否有一种简短的方法可对参数元组*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))
还是这个解决方案更好?
答案 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")
,您将无法区分字符串参数和另一个可迭代的参数。>