-1

我是 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)代码的一部分。谁能帮帮我?

4

1 回答 1

5

lambda t:t['id']==task_id是一个返回布尔值的函数。如果t['id']等于task_id,则 lambda 将返回 True。

filter()遍历 的每个元素tasks,将其分配给t。如果布尔值是True,那么它将保留在返回的列表中。如果是False,则不包含在新列表中。IE,它被过滤了。

换句话说,它与[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]
于 2013-09-25T10:51:11.030 回答