设计过滤函数的谓词

时间:2016-09-23 12:02:58

标签: python recursion filter higher-order-functions

我在内置滤镜功能中有这个功能。

def filter(pred, seq):
    if seq == ():
        return ()
    elif pred(seq[0]):
        return (seq[0],) filter(pred, seq[1:])
    else:
        return filter(pred, seq[1:])

我们应该使用设计的过滤器函数将覆盖函数转换为只有一个返回行的函数(它会覆盖更强大的python版本)。

我们应该转换的代码是:

def lookup_bus_stop_by_road(stops, road):
    matched = ()
    for bus_stop in stops:
        if get_road_name(bus_stop) == road:
            matched = matched + (bus_stop, )
    return matched

我的问题是:我应该如何通过调整给定的lookup_bus_Stop_by_road函数来转换我的过滤函数的谓词?但我总是得到TypeError:bool对象不可调用。

这是我投入的回报:

def lookup_bus_stop_by_road(stops, road):
    return filter(get_road_name(bus_stops) == road, stops)

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

get_road_name(bus_stops) == road 

是布尔值,而不是函数。你想要做的是创建一个调用get_road_name的函数,并检查结果是否等于road

filter(lambda x: get_road_name(x) == road, stops)

有关此主题的更多信息,请参阅此处:https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions