ITPub博客

首页 > 应用开发 > Python > Python 映射协议中的 __contains__ 方法

Python 映射协议中的 __contains__ 方法

原创 Python 作者:raptors 时间:2025-11-13 14:53:37 0 删除 编辑

# Python 映射协议中的 `__contains__` 方法


在 Python 中,`__contains__` 方法是映射协议(Mapping Protocol)的一部分,用于实现 `in` 操作符的功能,检查一个键是否存在于映射对象(如字典)中。


## 基本用法


对于自定义的映射类型,你可以实现 `__contains__` 方法来支持 `in` 操作符:


```python

class MyMap:

    def __init__(self):

        self._data = {}

    

    def __setitem__(self, key, value):

        self._data[key] = value

    

    def __getitem__(self, key):

        return self._data[key]

    

    def __contains__(self, key):

        return key in self._data


m = MyMap()

m['a'] = 1

print('a' in m)  # 输出: True

print('b' in m)  # 输出: False

```


## 内置字典的 `__contains__`


Python 内置的 `dict` 类型已经实现了 `__contains__` 方法:


```python

d = {'a': 1, 'b': 2}

print('a' in d)    # 输出: True

print('c' in d)    # 输出: False

```


## 性能考虑


对于字典,`in` 操作的平均时间复杂度是 O(1),因为它是基于哈希表实现的。


## 注意事项


1. `__contains__` 应该返回一个布尔值(True 或 False)

https://zhiq.zhaopin.com/moment/73382140

https://zq.zhaopin.com/moment/73382115

https://zq-mobile.zhaopin.com/moment/73382115

https://zhiq.zhaopin.com/moment/73382115

https://zq.zhaopin.com/moment/73382006

https://zq-mobile.zhaopin.com/moment/73382006

https://zhiq.zhaopin.com/moment/73382006

https://zq.zhaopin.com/moment/73381971

https://zq-mobile.zhaopin.com/moment/73381971

https://zhiq.zhaopin.com/moment/73381971

https://zq.zhaopin.com/moment/73381791

https://zq-mobile.zhaopin.com/moment/73381791

https://zhiq.zhaopin.com/moment/73381791

https://zq.zhaopin.com/moment/73381676

https://zq-mobile.zhaopin.com/moment/73381676

https://zhiq.zhaopin.com/moment/73381676

https://zq.zhaopin.com/moment/73381334

https://zq-mobile.zhaopin.com/moment/73381334

https://zhiq.zhaopin.com/moment/73381334

https://zq.zhaopin.com/moment/73381328

https://zq-mobile.zhaopin.com/moment/73381328

https://zhiq.zhaopin.com/moment/73381328

https://zq.zhaopin.com/moment/73381298



2. 如果没有实现 `__contains__`,Python 会尝试使用 `__iter__` 然后进行线性搜索

3. 对于序列类型(如列表),`in` 操作会使用 `__contains__` 来检查值是否存在,而对于映射类型则是检查键是否存在


## 完整映射协议


一个完整的映射协议通常还包括:

- `__getitem__`

- `__setitem__`

- `__delitem__`

- `__len__`

- `__iter__`

- `__contains__`


通过实现这些方法,你可以创建完全兼容 Python 映射协议的自定义映射类型。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/34366/viewspace-3101283/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-29

  • 博文量
    20
  • 访问量
    20448