当前位置:  开发笔记 > 编程语言 > 正文

除了检查序列中的成员资格外,是否可以使用Python中的`in`操作符?

如何解决《除了检查序列中的成员资格外,是否可以使用Python中的`in`操作符?》经验,为你挑选了1个好方法。

in Python中的运算符是一个成员运算符,用于测试序列中的成员资格.

in运营商的描述

如果在指定序列中找到变量,则求值为true,否则求值为false.

现在考虑代码:

>>>s = 'HELLO'
>>>char = 'M'
>>>char in s
False
>>>for char in s:
....    print(char)
H
E
L
L
O

请在这里纠正我:我想声明for char in s应该检查'M''HELLO'其中进行评估,False并循环应该结束.但是在这里,它不是检查成员资格,而是将每个字符分配给变量char,因此循环打印每个字符.我的问题是,in除了检查会员资格外,如何使用运营商?



1> Right leg..:

in关键字用于两种不同的上下文:

会员资格考试

迭代

如你所说,第一个通过调用序列来检查某些东西是否属于一个序列__contains__.使用此语法时,将返回布尔值.

x = 1
l = [0, 1, 2]
if x in l:
    print("x is in l")
else:
    print("x is not in l")
> x is in l

由于in查找__contains__方法,x in seq只要seq实现一个__contains__方法就有效.关于成员资格的概念,您可以实现这一点,即使它没有逻辑意义.

class Foo:
    def __contains__(self, x):
        return x == 12

f = Foo()
if 12 in f:
    print("12 is in f")
> 12 is in f

第二个实际上更经常使用.根据迭代协议,它枚举可迭代对象的元素,以便可以对它们执行操作.

您可以迭代列表:

l = [0, 1, 2]
for x in l:
    print(x)
> 0
> 1
> 2

在一个字符串:

s = "hello"
for c in s:
    print(c)
> h
> e
> l
> l
> o

并且在实现该__iter__方法的任何对象上,只要后者返回实现该__next__方法的对象.

以下示例是一个基本的(不是说"差")range类,您可以迭代实例.

class Bar:
    def __init__(self, first, last):
        self.first = first
        self.last = last
        self.current = first

    def __iter__(self):
        return self

    def __next__(self):
        if self.current == self.last:
            raise StopIteration
        result = self.current
        self.current += 1
        return result

b = Bar(0, 5)
for i in b:
    print(i)
> 0
> 1
> 2
> 3
> 4

许多本机类型都是可迭代的:字典,范围,集合 ......


从语义上讲,in在两种情境中使用相同的单词是有意义的."那东西是这个东西吗?" 是一个有效的问题,只要"stuff"是一个集合,它能够包含东西.从此以后,"为那东西中的每一件事做这件事"似乎很自然.

因此,对于两种情境都使用"in".

然而,这实际上是对现实的简化,实际上更为广阔.我邀请您阅读文档,并深入了解该in关键字,阅读Python的语法.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有