"if x in self:" 的意思是什么?

3

我在Python中有一个成员方法,其中包含以下代码片段:

def foo(self, param):
    x = self._as_array(param)
    if x in self:
        raise KeyError('Data point {} is not unique'.format(x))

这里的if x in self:是什么意思?它没有引用任何成员方法。例如,if x in self._some_array是有意义的,但是仅仅使用self而没有引用应该表示什么?

如果self实现了__contains__,那么它可以在语句中以这种方式使用。请参阅Python数据模型中的此文档 - John Szakmeister
self是类对象,而X包含返回函数的值,如果_as_array(param)。现在(如果x在self中:)条件用于识别无论x包含什么值是否在self下可用。 - user341143
2个回答

9

x in y是Python语言的一种特性,与Python数据模型中的__contains__方法相关。任何实现该方法的类都可以在这种表达式中使用。

x in y

等同于

y.__contains__(x)

如果未实现__contains__方法但实例可迭代,Python 将比较x和从迭代器返回的每个值。

0

在技术上,这意味着你要求Python检查传递的对象中是否存在参数x。 self所能做的魔法之一是,每当你创建一个对象时,它会将自身作为参数传递,所以当你在函数init内使用self时,你引用的就是这个对象。

为了更好地理解这个概念,你可以查看以下链接课程: ----> [https://realpython.com/linked-lists-python/] 如果你仔细观察他们如何迭代遍历链表,你会发现他们倾向于使用以下方式: for node in self: pass 而不是 while node: pass 虽然while循环和for循环的工作方式相同,但for循环是一种更高级、更漂亮的迭代方式。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接