微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取Python函数以干净地返回标量或列表,具体取决于参数的数量

如何解决获取Python函数以干净地返回标量或列表,具体取决于参数的数量

scalify如果列表只有一个元素,则可以轻松编写一个从列表返回该元素的函数,即,它试图使其成为标量(因此命名)。

def scalify(l):
    return l if len(l) > 1 else l[0]

然后可以在函数中使用它,如下所示:

def foo(*args):
    return scalify([a + 1 for a in args])

这可以解决问题,但是我和那些建议您不要这样做的人在一起。由于一个原因,除非您知道至少传入了两个项目,否则它排除了对结果进行迭代的可能性。另外,如果有列表,则在调用函数时必须将列表解压缩,从而失去其“列表性”,并且您知道可能无法获得列表。在我看来,这些缺点掩盖了您可能会从该技术中看到的任何好处。

解决方法

免责声明:如果有的话,我正在寻找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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。