2011-05-14 37 views
2

可否請你看看下面的代碼:用法爲,如果在Python

def search(self, filter): 
     return [note for note in self.notes if note.match(filter)] 

我想forif語句需要一個冒號。以上,在forif之後沒有冒號。而這種如果和用法看起來不像我在課本中讀到的。我大致看了下是這樣的:

for note in self.notes: 
    some code 

if note.match(filter): 
    some code 

請你解釋一下這種iffor使用,它不包括冒號,這是一個單行的語句。條款已在聲明的最後。真令人困惑。

回答

8

那如果這不是一個單純的循環/,但list comprehension

尤其是這一段代碼:

return [note for note in self.notes if note.match(filter)] 

self.notes回報只有那些音符的符合過濾條件的每個音符。

這基本上是一個過濾器,但一般而言,您可以使用列表解析也以「改造」列表中的元素例如爲:

[1000 * x for x in myNumbers if x < 2] 
+0

謝謝。您能否告訴我,在Python中「過濾」一個保留字,因爲每次鍵入它時都會突出顯示它? – alwbtc 2011-05-14 10:41:10

+0

@alwbtc在此處查看:http://docs.python.org/library/functions.html – vrde 2011-05-14 10:43:23

+0

@alwbtc [filter](http://docs.python.org/library/functions.html#filter)突出顯示因爲是一個內置函數,可以用來過濾列表(它基本上是一個過濾列表理解的快捷方式) – digEmAll 2011-05-14 10:43:55

3

你困惑是因爲你正在尋找一個列表理解。

更多here

1

這不是一個普通的,而不是在C-語感。這是一個Python list comprehension