在Python中构造高阶函数时出现意外行为

时间:2017-05-07 21:24:18

标签: python list-comprehension higher-order-functions

我正在尝试在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]

有人可以解释为什么会出现上述行为吗?

0 个答案:

没有答案