2013-09-25 121 views
-1

表達我的新Python和不理解下面的表達式瞭解在Python

tasks = [ 
      { 
       'id': 1, 
       'title': u'Buy groceries', 
       'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', 
       'done': False 
      }, 
      { 
       'id': 2, 
       'title': u'Learn Python', 
       'description': u'Need to find a good Python tutorial on the web', 
       'done': False 
      } 
     ] 

然後

task = filter(lambda t: t['id'] == task_id, tasks) 
if len(task) == 0: 
    abort(404) 
return jsonify({ 'task': task[0] }) 

我不完全理解的代碼的filter(lambda t:t['id']==task_id,tasks)部分。任何人都可以幫助我嗎?

+2

你能否指點我們[過濾器()的文檔](http://docs.python.org/3.3/library/functions.html#filter)你不理解的地方? –

回答

5

lambda t:t['id']==task_id是返回布爾值的函數。如果t['id']等於task_id,那麼lambda將返回True。

filter()通過tasks的每個元素,將其分配給t。如果布爾值爲True,則它將保留在返回的列表中。如果它是False,它不包含在新列表中。 I.E,它是已過濾

換句話說,它是相同的如[t for t in tasks if t['id'] == task_id]


這裏的另一個例子:

>>> mylist = range(10) 
>>> filter(lambda x: x % 2 == 0, mylist) 
[0, 2, 4, 6, 8] 

此發現所有的偶數編號1和10

之間這也相當於:

>>> mylist = range(10) 
>>> [x for x in mylist if x % 2 == 0] 
[0, 2, 4, 6, 8]