2016-04-27 232 views
0

我想了解return聲明的工作原理。我熟悉return聲明,但不知道returnin聲明。下面是一個使用它的類方法的例子,我想知道它的作用。「返回b」是什麼意思?

def a(self, argv): 
    some = self.fnc("Format Specifier") 
    return argv in some 
+2

https://docs.python.org/2/reference/expressions.html#not-in – larsks

+0

...和https://docs.python.org/2/reference/datamodel.html#object .__ contains__ – martineau

回答

5

value in values意味着 「True如果valuevalues否則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如果argvsome中否則返回False

3

它表示argv是否是某些元素(以布爾值表示)。有些可能是列表,元組,字典等

0

return本身是這裏並不重要:您可以將此解釋爲:

return (argv in some) 

現在在關鍵字表示:

運營商innot in測試集合成員x in s評估爲true如果x是集合sfalse的成員否則。 x not in s返回x in s的否定。集合成員資格測試傳統上與序列綁定;如果集合是一個序列並且包含與該對象相等的元素,則對象是集合的成員。但是,對於許多其他對象類型來說,支持成員測試而不是序列是有意義的。特別是,詞典(用於鍵)和集合支持成員資格測試。

Python使用的回退機制,其中它會檢查是否some(在這種情況下)支持以下方法之一:

首先它檢查some是否是一個列表或元組:

對於列表和元組類型,當且僅當存在索引i以使x is y[i]x == y[i]true時,x in ytrue

接着它檢查既argvsome和是否是字符串:

對於Unicode和str荷蘭國際集團的類型,x in ytrue當且僅當x子串的y。等效測試是y.find(x) != -1。請注意,x and y不必是相同的類型;因此,u'ab''abc'將返回True。空字符串始終被認爲是任何其他字符串的子字符串,因此​​中的""將返回True。

現在每一個實現對象__contains__方法在測試支持這種innot如文檔中被進一步描述:

對於限定所述__contains__()方法用戶定義的類,x in ytrue如果並且只有在y.__contains__(x)true

因此,除了實現詞典,元組和列表的用法外,您還可以爲任意對象定義自己的__contains__方法。

的另一種方法以支持該功能如下:

對於不限定__contains__()但做限定__iter__()用戶定義的類,x in ytrue如果在遍歷y產生與x == z一些值z 。如果在迭代過程中引發異常,就像引發異常一樣。

最後:

最後,舊式的迭代協議嘗試:如果一個類定義__getitem__()x in ytrue當且僅當有一個非負整數索引i例如x == y[i],以及所有較低的整數索引不會引起異常。 (如果發生任何其他異常,就像引發該異常一樣)。

2

如果您知道背景中發生了什麼,可能會更清楚。當您使用x in y時,這是y.__contains__(x) 的快捷方式。當你定義一個類時,你可以定義你自己的__contains__方法,它可以返回任何你想要的東西。通常,它返回TrueFalse。因此,argv in some將是argv.__contains__(some)的結果:要麼是True要麼是False。你然後返回。


如果y不具有__contains__方法,它被轉換爲一個迭代器,並在其中的每個項目檢查被x平等。

+0

這並非完全正確。例如,對於'str',完成'find'檢查,在'abc''上迭代只會導致'a','b','c'。 –

+0

@WillemVanOnsem:''abc'.__ contains __('ab')' - >'True' – zondo