我想了解return
语句的工作原理。我熟悉return
声明但未了解return
in
声明。下面是一个使用它的类方法的示例,我想知道它的作用。
def a(self, argv):
some = self.fnc("Format Specifier")
return argv in some
答案 0 :(得分:5)
value in values
表示“True
如果value
在values
,False
”
一个简单的例子:
In [1]: "foo" in ("foo", "bar", "baz")
Out[1]: True
In [2]: "foo" in ("bar", "baz")
Out[2]: False
因此,在您的情况下,return argv in some
表示“如果True
argv
,则返回some
,否则返回False
”
答案 1 :(得分:4)
这意味着argv是否是某些元素(布尔值)。有些可能是list,tuple,dict等。
答案 2 :(得分:2)
如果您知道背景中发生了什么,可能会更清楚。当您使用x in y
时,这是y.__contains__(x)
1 的快捷方式。定义类时,可以定义自己的__contains__
方法,该方法实际上可以返回您想要的任何内容。通常,它会返回True
或False
。因此,argv in some
将是argv.__contains__(some)
的结果:True
或False
。然后你返回。
<子>
1 如果y
没有__contains__
方法,则将其转换为迭代器,并检查其中的每个项目是否与x
相等。
子>
答案 3 :(得分:0)
$eventParams
本身并不重要:您可以将其解释为:
issue
现在in关键字意味着:
运营商
return
和return (argv in some)
测试集合成员资格。如果in
是集合not in
的成员,则x in s
评估为true
,否则为x
。s
返回false
的否定。集合成员资格测试传统上一直与序列绑定;如果集合是序列并且包含与该对象相等的元素,则对象是集合的成员。但是,许多其他对象类型支持成员资格测试而不是序列是有意义的。特别是,词典(用于键)和集合支持成员资格测试。
Python使用回退机制来检查x not in s
(在本例中)是否支持以下方法之一:
首先检查x in s
是列表还是元组:
对于列表和元组类型,
some
为some
当且仅当存在索引x in y
时,true
或i
为{ {1}}。
接下来,它会检查x is y[i]
和x == y[i]
是否为字符串:
对于Unicode和
true
类型,argv
是some
当且仅当str
是x in y
的子字符串时才true
}。等效测试是x
。注意,y
不一定是同一类型;因此,y.find(x) != -1
中的x and y
将返回u'ab'
。空字符串始终被视为任何其他字符串的子字符串,因此'abc'
中的True
将返回True。
现在,每个实现""
方法的对象都在测试中支持"abc"
和__contains__
,如文档中进一步描述的那样:
对于定义
in
方法的用户定义类,当{且仅not
为__contains__()
时,x in y
为true
。
除了实现字典,元组和列表的用法之外,您还可以为任意对象定义自己的y.__contains__(x)
方法。
支持此功能的另一种方法如下:
对于未定义
true
但定义__contains__
但定义__contains__()
的用户定义类,__iter__()
如果某些值为x in y
且true
为z
迭代x == z
时生成。如果在迭代期间引发异常,那就好像是在异常中引发异常。
最后:
最后,尝试了旧式迭代协议:如果一个类定义
y
,__getitem__()
是x in y
当且仅当存在非负整数索引时true
使i
和所有较低整数索引不会引发x == y[i]
异常。 (如果引发任何其他异常,就好像在异常中引发异常)。