我是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)
部分。有人可以帮帮我吗?
答案 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]