免责声明:我正在寻找 Python 2.6 解决方案,如果有的话。
我正在寻找一个在传递单个值时返回单个值或在传递多个值时返回序列的函数:
>>> a = foo(1)
2
>>> b, c = foo(2, 5)
>>> b
3
>>> c
6
需要明确的是,这是为了让一些函数调用看起来比:
a, = foo(1)
或
a = foo(1)[0]
现在,不雅的解决方案是沿着这些思路:
def foo(*args):
results = [a + 1 for a in args]
return results if len(results) > 1 else results[0]
是否有任何语法糖(或函数)可以使这种感觉更清晰?像下面这样的吗?
def foo(*args):
return *[a + 1 for a in args]
最佳答案
如果你觉得更好的话,你总是可以写一个装饰器来省略 if 语句:
import functools
def unpacked(method):
@functools.wraps(method)
def _decorator(*args):
result = method(*args)
return results if len(results) != 1 else results[0]
return _decorator
用法:
@unpacked
def foo(*args):
return [arg + 1 for arg in args]
关于python - 获取 Python 函数以根据参数数量干净地返回标量或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029001/