请教大家一个问题
Topic source这个你可以通过自己写程序体验一下,因为filter生成的是惰性数列,也就是说它其实只是将一个规则存储下来,并不是立即计算出结果存储的。当filter后使用lambda函数,lambda x:x%n>0,n的值在每次循环中都会被迭代成新的,这时候filter只会存储最后的n值……比如你让最后的n等于999,那所有在之前的_odd_iter里生成的数除以999的余数当然都是大于0的……那最后你就是打印出了所有的奇数……这个也是我自己写了个程序发现的,你可以自定义一个list然后给n赋予不同的值,手动执行两次循环,就会明白了
直接把lambda表达式放进去,第二次是
it = filter(lambda x: x % n, filter(lambda x: x % n, 第一次的it)) ,n=5,此时应该是it = filter(lambda x: x % 5, filter(lambda x: x % 5, 第一次的it))
使用柯里化的方式,第二次是
it = filter(lambda x: x % 5, filter(lambda x: x % 3, 第一次的it))
这应该是这两个的区别。
- 1
NPProb
原文中定义了一个这样的函数:
然后是这么用的:
我看到这里的时候就想,为什么不能把lambda函数直接写在filter的里面,然后试了一下,果然是不行的,结果是会打出所有奇数来。
我想问一下大家,为什么这里要定义一个返回lambda函数的函数使用,而将lambda函数本身直接放在filter里面又发生了什么?