理解Python中的表达式

时间:2013-09-25 10:48:11

标签: 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)部分。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分: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]