我在内置滤镜功能中有这个功能。
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)
这里有什么问题?
答案 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