关于lambda问题求鱼友讲解
代码是这样的:list ( filter ( lambda x: x*2, range (10) ) )
运行结果是:
我的疑问是,为啥x乘2的结果不会显示出来呢? 本帖最后由 Twilight6 于 2020-5-27 11:15 编辑
要知道Python中 只要 0 、空字符串、空列表、空字典等 都可以看作布尔类型的值为 False
只要是 非0 ,非空字符串、列表、字典 等 都可以看作布尔类型的值为 True
filter 是过滤值的函数的过滤 lambda x: x*2 中为 False的值
因为( lambda x: x*2, range (10) ) 得出的列表是
而只有 0 的值为 False所以 只过滤了 0
因为x*2都是真值 显示出来要写list(map(lambda x:x*2,range(10))) list (filter ( lambda x: x*2, range (10)))
拆成两部分看
首先是最外面的list(),是把结果显示出来,这个没有什么问题。
其次就是一个filter函数的用法
filter函数用法,filter(function, iterable),就是把一个function(函数,可以是自己定义的函数,也可以是匿名函数,也可以是内置函数) 映射于可迭代对象,举个例子
filter(abs,)把abs函数与后面列表内的元素映射,即列表内每个元素求绝对值。最后结果是一个地址,要显示可以用list(),结果是,可以看到0没有了
这是因为,filter只会返回结果为True的,0在python里面是False。
所以以你的提问来看 filter (lambda x: x*2, range (10)),其实是把lambda函数映射到0~9这10个数,这个lambda函数的意思是传入一个x,返回结果是x*2
当传入0时,0*2的结果是为0,其他1~9都是True,所以最终结果是 有0
页:
[1]