请问 filter()传入的函数有两个参量时该怎么写后面的部分?

2016-08-16 19:56:34 +08:00
 Newyorkcity



先请看这两幅图中,为什么第一幅图中那个函数名是写全的,加上了(n)
而第二幅图中却不用加?

第一幅图那个 lambda 函数我真的是很难读懂...
我的理解是:
在 primes 那里的 filter 中从序列 it 中取出的指其实是赋值给了函数中的 x
所以如果改的话可以改成
def _not_divisible(n,x):
return x % n
然后如果能把 primes 函数中的 n 指向 n,把序列 it 中取出来的值给 x 就好了...

这个理解对么...
正确的理解应该是什么
1739 次点击
所在节点    Python
8 条回复
zhuangzhuang1988
2016-08-16 19:58:59 +08:00
理解下函数签名。。。
Newyorkcity
2016-08-16 20:03:38 +08:00
@zhuangzhuang1988 可以更具体一点么...
Newyorkcity
2016-08-16 20:08:54 +08:00
@zhuangzhuang1988
是不是 lambda x : x % n > 0 会返回一个布尔值,可是这个布尔值并不是_not_divisible 的返回值,所以才在 lambda 之前又加了一个 return?
相当于
def f(x,n):
return x % n > 0
def _not_divisible(x,n):
return f(x,n)
这样子?
那干嘛不直接
def _not_divisible(x,n):
return x % n > 0
是因为 filter 传入的函数无法接受两个变量么?
yexiaoxing
2016-08-16 20:10:16 +08:00
_not_divisible 返回的好像是一个函数不是一个值哦
可以在 python shell 里运行一下试试
比如运行 _not_divisible(5)(2)
Newyorkcity
2016-08-16 20:26:49 +08:00
@yexiaoxing
运行了一下返回的是一个 True
所以我觉得「是不是 lambda x : x % n > 0 会返回一个布尔值,可是这个布尔值并不是_not_divisible 的返回值,所以才在 lambda 之前又加了一个 return? 」这个理解应该没问题?
不过「_not_divisible(5)(2)」很关键啊...就是那个(2)应该是赋值向函数内部 lambda 的 x 的值吧....所以我对前后两幅图前者加了( n )而后者不加的理解是对的喽,因为前者需要 filter 处理的数是 x 的值而不是 n 的值,n 已经专门赋值了
ljbha007
2016-08-16 20:38:32 +08:00
_not_divisible 返回的是个 lambda 函数
is_odd 返回的是函数运行的结果
ljbha007
2016-08-16 20:41:04 +08:00
@Newyorkcity 这里用 lambda 的意义是返回一个函数 判断是否能被给定整数整除

比如说 _not_divisible(2)(3)返回 True 表示 3 不能被 2 整除
_not_divisible(3)(6)返回 False 表示 6 能被 3 整除
Newyorkcity
2016-08-16 20:51:16 +08:00
@ljbha007
not_divisible 返回的是个布尔值吧,嗷...
你的意思是逻辑上_not_divisible 先返回了 lambda 这个函数
然后 lambda 接受了第二个括号内的内容并返回了最终的布尔值对么?

不过说到最后,如果 filter 的传入函数有两个变量到底该怎么写呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/299731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX