分享
三行代码  ›  专栏  ›  技术社区  ›  David542

为了测试身份

  •  0
  • David542  · 技术社区  · 1 周前

    在python中是否有一种内置的方法来执行以下操作,以测试身份而不是相等性:

    >>> a=1000
    >>> b=1000
    >>> c=1000
    >>> a in [b,c] # test for equality
    # True
    >>> a is b | a is c
    # False
    

    map 或者更紧凑一点的?沿着以下路线:

    map(is, iterable)
    

    isin=lambda x,L: any([x is l for l in L])
    isin(a,[b,c])
    # False
    
    3 回复  |  直到 1 周前
        1
  •  2
  •   Mad Physicist    1 周前

    对于通用实用程序,可以使用 operator.is_ partial 功能:

    from operator import is_
    from functools import partial
    
    any(map(partial(is_, a), [b, c]))
    

    你也可以用同样的方法 lambda 当然:

    any(map(lambda x: a is x, [b, c]))
    

    当然,任何 map 可以表示为生成器:

    any(a is x for x in [b, c])
    
        2
  •  2
  •   Tomerikoo FailSafe    1 周前

    你可以比较 id

    id(a) in map(id, [b, c])
    

    根据 is operator's documentation

    操作员 is is not 测试对象标识: x is y 是同一个物体。 对象标识是使用 id() 功能 .

    id() 价值观。

    例如:

    >>> id([]) in map(id, [[], []])
    True
    
        3
  •  1
  •   Tomerikoo FailSafe    1 周前

    你可以用 any() :

    any(a is x for x in [b, c])