关于 python 中的 lambda
Regarding lambdas in python
我在python方面很弱,尤其是
我有一个 class 定义如下:-
class Employee:
def __init__(self, id, age):
self.age = age
self.id = id
我有一个lambda要读:-
expr = (0, lambda acc, e: max(acc, e.age), lambda x: x)
根据我收集到的某种累加器,它在 e.age 键中的年龄元素上取最大值。
所以我的第一个猜测是将员工列表传递给 expr:-
employeeList = []
for i in range(1, 10):
employeeList.append(Employee(i, 20))
maxAge = expr(employeeList)
但它给出了以下错误:-
TypeError: 'tuple' object is not callable
有人可以帮助我阅读这个 lambda 表达式,特别是要传递给这个 expr 的具体内容吗?由于 lambda 在 python 中不可调试,这很难。
扩展我的评论,这就是使用标准 Python 函数完成代码的方法:
from functools import reduce
# your code
maxAge = reduce(expr[1], map(expr[2], employeeList), expr[0])
甚至
def map_reduce(iterable, initializer, reduce_pred, map_pred):
return reduce(reduce_pred, map(map_pred, iterable), initializer)
maxAge = map_reduce(employeeList, *expr)
这里,expr[0]
是初始化器,expr[1]
是归约谓词,expr[2]
是映射谓词。
我在python方面很弱,尤其是
我有一个 class 定义如下:-
class Employee:
def __init__(self, id, age):
self.age = age
self.id = id
我有一个lambda要读:-
expr = (0, lambda acc, e: max(acc, e.age), lambda x: x)
根据我收集到的某种累加器,它在 e.age 键中的年龄元素上取最大值。
所以我的第一个猜测是将员工列表传递给 expr:-
employeeList = []
for i in range(1, 10):
employeeList.append(Employee(i, 20))
maxAge = expr(employeeList)
但它给出了以下错误:-
TypeError: 'tuple' object is not callable
有人可以帮助我阅读这个 lambda 表达式,特别是要传递给这个 expr 的具体内容吗?由于 lambda 在 python 中不可调试,这很难。
扩展我的评论,这就是使用标准 Python 函数完成代码的方法:
from functools import reduce
# your code
maxAge = reduce(expr[1], map(expr[2], employeeList), expr[0])
甚至
def map_reduce(iterable, initializer, reduce_pred, map_pred):
return reduce(reduce_pred, map(map_pred, iterable), initializer)
maxAge = map_reduce(employeeList, *expr)
这里,expr[0]
是初始化器,expr[1]
是归约谓词,expr[2]
是映射谓词。