我正在尝试在Python中构造一个函数,它接受一个数字列表并返回一个依赖于输入值的函数列表:
filters = lambda ys: [lambda x: x % y == 0 for y in ys]
如果我用一个值列表调用上面的filters
函数,它应该返回一个从输入列表构造的lambda函数列表。例如,调用filters([3,5])
应该返回
[lambda x: x % 3 == 0,
lambda x: x % 5 == 0]
将另一个函数applyToNum
(类似于map
)定义为
applyToNum = lambda x, fns: [fn(x) for fn in fns]
我现在遇到以下行为:
applyToNum(15, filters([3,4,5]))
# returns [True, True, True] rather than [True, False, True]
有趣的是,如果我手动构建filters
函数列表,它会按预期工作:
filters2 = [
lambda x: x % 3 == 0,
lambda x: x % 4 == 0,
lambda x: x % 5 == 0]
applyToNum(15, filters2)
# returns [True, False, True]
有人可以解释为什么会出现上述行为吗?