python - 获取 Python 函数以根据参数数量干净地返回标量或列表

标签 python python-2.6 python-2.x iterable-unpacking

免责声明:我正在寻找 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/

相关文章:

Python 3 简单的 HTTPS 服务器

python - 对身份感到困惑并且是运算符(operator)

python - 在 Python 中从 JSON 响应中提取 token

PYTHON 需要帮助简化 - 从预设列表中生成随机项目

python - 具有许多将返回相同值的键的 2d 字典

python - 如何忽略调用 rglob 时发生的异常?

python - 在哪里存储与文件关联的元数据?

python - 出现以下错误: "EnvironmentError: Unable to find libfuse"

multiprocessing - Ubuntu 10.04 - Python 多处理 - 'module' 对象没有属性 'local' 错误

python - 同时使用带参数和不带参数的装饰器