2013-09-25 67 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]