首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中有内置的标识函数吗?

python中有内置的标识函数吗?
EN

Stack Overflow用户
提问于 2012-01-06 02:49:28
回答 5查看 57.8K关注 0票数 162

我想指出一个什么也不做的函数:

代码语言:javascript
复制
def identity(*args)
    return args

我的用例是这样的

代码语言:javascript
复制
try:
    gettext.find(...)
    ...
    _ = gettext.gettext
else:
    _ = identity

当然,我可以使用上面定义的identity,但是内置的肯定会运行得更快(并且避免我自己引入的bug)。

显然,mapfilter使用None作为标识,但这是特定于它们的实现的。

代码语言:javascript
复制
>>> _=None
>>> _("hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
EN

回答 5

Stack Overflow用户

发布于 2012-01-06 02:55:51

你的会工作的很好。当参数数量固定时,您可以使用匿名函数,如下所示:

代码语言:javascript
复制
lambda x: x
票数 23
EN

Stack Overflow用户

发布于 2018-06-22 16:01:04

Python中没有内置的标识函数。对Haskell's id function的模仿将是:

代码语言:javascript
复制
identity = lambda x, *args: (x,) + args if args else x

示例用法:

代码语言:javascript
复制
identity(1)
1
identity(1,2)
(1, 2)

由于identity除了返回给定的参数之外什么也不做,我不认为它比本机实现慢。

票数 11
EN

Stack Overflow用户

发布于 2019-10-23 21:34:29

如果速度无关紧要,这应该可以处理所有情况:

代码语言:javascript
复制
def identity(*args, **kwargs):
    if not args:
        if not kwargs:
            return None
        elif len(kwargs) == 1:
            return  next(iter(kwargs.values()))
        else:
            return (*kwargs.values(),)
    elif not kwargs:
        if len(args) == 1:
            return args[0]
        else:
            return args
    else:
        return (*args, *kwargs.values())

用法示例:

代码语言:javascript
复制
print(identity())
None
$identity(1)
1
$ identity(1, 2)
(1, 2)
$ identity(1, b=2)
(1, 2)
$ identity(a=1, b=2)
(1, 2)
$ identity(1, 2, c=3)
(1, 2, 3)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8748036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档