内置函数filter()和匿名函数lambda解析

一.内置函数filter

filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器(python3以下版本返回是列表)。

语法:filter(function or None, iterable) --> filter object

实例:

#获取数字100以内的奇数
def even_num(n):
    return n % 2 ==1
res = filter(even_num,(i for i in range(10)))
for i in res:
    print(i)
#执行结果:
1
3
5
7
9
# 利用 filter、自定义函数 获取l1中元素大于33的所有元素 l1 = [11, 22, 33, 44, 55]
ll = [11, 22, 33, 44, 55]
def ll_fil(x):
    return x > 33
for i in filter(ll_fil,ll):
    print(i)
#执行结果:
44
55

二.匿名函数lambda

lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。其实说的没错,lambda在Python这种动态的语言中确实没有起到什么惊天动地的作用,因为有很多别的方法能够代替lambda。

同时,使用lambda的写法有时显得并没有那么pythonic。甚至有人提出之后的Python版本要取消lambda。回过头来想想,Python中的lambda真的没有用武之地吗?其实不是的,至少我能想到的点,主要有:

1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

3. 使用lambda在某些时候让代码更容易理解。

lambda基础:冒号前是参数,可以有多个使用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象

g = lambda x:x**2
print(g(4))
执行结果:
16
#利用 filter、lambda表达式 获取l1中元素小于33的所有元素 l1 = [11, 22, 33, 44, 55]
ll = [11, 22, 33, 44, 55]
res = filter(lambda x:x<33,ll)
for i in res:
    print(i)
#执行结果:
11
22
时间: 2024-10-08 04:02:44

内置函数filter()和匿名函数lambda解析的相关文章

内置函数补充、匿名函数及闭包

内置函数.匿名函数及闭包 匿名函数 def func(x,y): return (x,y) print(func(1,2)) # 结果: (1,2) f = lambda x,y:(x,y) # lambda关键字 print(f(1,2)) # 结果: (1,2) print((lambda x,y:(x,y))(1,2)) # 结果: (1,2) # 一行代码实现匿名函数的定义及调用 print(lambda :1) print((lambda :1)()) # 匿名函数可以不写参数,但必须

函数作用域,匿名函数,map,filter,reduce---Python重新开始第五天

函数作用域 函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系 1 name='alex' 2 3 def foo(): 4 name='lhf' 5 def bar(): 6 name='wupeiqi' 7 print(name) 8 def tt(): 9 print(name) 10 return tt 11 return bar 12 13 # bar=foo() 14 # tt=bar() 15 # print(tt) 16 # tt() 17 r1 = foo(

angular内置过滤器-filter

这篇文章来讲解一下angular内置的filter过滤器. 没错,这个过滤器的名字,就叫'filter',虽然自定义过滤器也是使用module.filter()...但是不要混淆了,这个filter就是过滤器的名字~ 这个过滤器是干嘛的呢? 它的作用是: '从数组中过滤出需要的项,放入新的数组并返回这个新数组.' 一.用在html模板里: 因为是用来过滤数组,所以这个过滤器基本上都用在ng-repeat指令上,比如: <div ng-repeat="list in lists | filt

JavaScript 函数声明,函数表达式,匿名函数的区别,深入理解立即执行函数(function(){…})()

function fnName(){xxxx}; // 函数声明:使用function关键字声明一个函数,在指定一个函数名. //例如:(正常,因为 提升 了函数声明,函数调用可以在函数声明之前) fnName(); function fnName(){ alert('Hello World'); } var fnName = function(){xxxx}; //函数表达式:使用function关键字声明一个函数,但是未给函数命名,最后将匿名函数赋予给一个变量. //例如1:(报错,变量fn

函数声明、函数表达式、匿名函数

函数声明.函数表达式.匿名函数 ()先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明 函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式. 匿名函数:function ()

函数细说及匿名函数

我们知道,函数是对象.每个函数 都是Function类型的实例,和其他引用类型一样具有方法和属性.由于函数是对象,因此函数名实际上是一个指向函数对象的指针. 函数有三种定义方式:函数声明,函数表达式,使用Function构造函数. 函数声明: 函数表达式: 在函数表达式中,使用变量sum即可引用函数,注意函数结尾有一个分号,就像声明其他变量一样. 构造函数(不推荐使用): 由于函数名仅仅是指向函数的指针,所以一个函数可以有很多的名字.注意使用不带圆括号的函数名是访问函数指针,而非调用函数. 在这

声明函数 执行上下文 匿名函数

方法一: var foo = function () { //code } 方法二: function foo () { //code } 方法一:foo在进入函数执行上下文开始执行代码的时候,foo是undefined的,执行完var foo = function () { }这句,foo才会得到赋值: 方法二:在进入函数执行上下文开始执行代码的时候,foo已经是一个function了. 一旦进入执行上下文(在执行代码之前),VO(变量对象)就会被一些属性填充: 函数的形参(当进入函数执行上下

ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/13/1310419.html 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: /// <summary> /// 防盗链Filter. /// </summary> public class An

[转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: /// <summary>/// 防盗链Filter./// </summary>public class AntiOutSiteLinkAttribute : ActionFilterAttribute, IActionFilter{    public