Python-在不在判断 in 和 in判断协议- in __contains__

本文介绍Python中如何使用in关键字判断元素是否存在于序列中,并通过自定义类实现__contains__方法来扩展这一功能。

in

  判断元素是否在序列中, 可以查看 in == is 区别

 

__contians__

  如果是对象则调用对象中的 __contains__方法

class BeiMenChuiXue:
    def __init__(self, name):
        self.name = name

    def __contains__(self, item):
        return item in self.name


if __name__ == '__main__':
    name = BeiMenChuiXue("beimenchuixue")
    print('bei' in name)

  

转载于:https://www.cnblogs.com/2bjiujiu/p/9142087.html

### Python 中 `in` 关键字的用途 #### 1. 列表、元组或其他可迭代对象中的成员检测 `in` 可用于检查某个值是否存在于列表、元组或任何其他支持迭代的对象中。如果存在,则返回 `True`,否则返回 `False`。 ```python my_list = [1, 2, 3, 4, 5] print(3 in my_list) # 输出 True print(6 in my_list) # 输出 False ``` 此行为利用了容器类实现的 `__contains__()` 方法[^1]。 --- #### 2. 字典中的键检测 对于字典数据结构,`in` 默认检查的是键是否存在,而非值的存在性。 ```python my_dict = {'a': 1, 'b': 2} print('a' in my_dict) # 输出 True print('c' in my_dict) # 输出 False ``` 需要注意的是,在解包操作中使用单星号 (`*`) 双星号 (`**`) 的情况下,可能会改变这种默认行为[^2]。 --- #### 3. 循环遍历 `in` 还可以用来定义循环变量的作用域范围,通常配合 `for` 使用。 ```python numbers = range(5) for num in numbers: print(num) ``` 上述代码通过 `in` 将 `num` 绑定到每次迭代的结果上。 --- #### 4. 子字符串匹配 当应用于字符串时,`in` 能够判断一个子串是否位于另一个字符串之中。 ```python text = "hello world" print("world" in text) # 输出 True print("foo" in text) # 输出 False ``` 这是基于字符串类型的内部机制完成的。 --- #### 5. 集合运算 集合(set 或 frozenset)也支持 `in` 来测试元素归属关系。 ```python s = {10, 20, 30} print(20 in s) # 返回 True print(40 in s) # 返回 False ``` 这同样依赖于底层实现了特定协议的方法,比如 `__contains__()` 函数。 --- #### 6. 结合生成器表达式简化逻辑 借助生成器表达式的特性[^4],我们可以更高效地执行复杂的条件过滤: ```python data = (i for i in range(10)) any(i % 7 == 0 for i in data) # 测试是否有能被7整除的数据项 ``` 这里虽然未显式写出 `if ... in ...` 形式,但实际上隐含着类似的思路。 --- ### 总结 综上所述,`in` 是一种非常灵活的关键字,广泛适用于多种场景下的包含性验证任务。它背后往往涉及到一些定制化方法的支持,例如 `__contains__()` 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值