如何在Python中实现list类的__contains__方法?

发布于 2021-01-29 14:10:51

假设我定义了以下变量:

mode = "access"
allowed_modes = ["access", "read", "write"]

我目前有一个类型检查语句

assert any(mode == allowed_mode for allowed_mode in allowed_modes)

但是,看来我可以简单地用

assert mode in allowed_modes

根据ThiefMasterPython列表类__contains__方法功能中的回答,这两个应该等效。确实是这样吗?我如何通过查找Python的源代码轻松地验证这一点?

关注者
0
被浏览
147
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    不,它们不相等。例如:

    >>> mode = float('nan')
    >>> allowed_modes = [mode]
    >>> any(mode == allowed_mode for allowed_mode in allowed_modes)
    False
    >>> mode in allowed_modes
    True
    

    有关更多详细信息,请参阅成员资格测试操作,包括以下语句:

    对于list,tuple,set,frozenset,dict或collections.deque等容器类型,该表达式x in y等效于any(x is e or x == e for e in y)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看