匿名函数

如今咱们要了解到一种函数:匿名函数。编程

  • ambda只是一个表达式,函数体比def简单不少。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有本身的命名空间,且不能访问自有参数列表以外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增长运行效率。

因此 咱们能够总结出来的是,匿名函数是一个能进行简单逻辑运算的简单函数,优势是不用再去命名类命名函数,下降程序的冗余度。函数式编程

在如下两种状况时使用匿名函数:函数

1. 指定运算一次性使用,因此不须要定义函数名,节省内存中变量定义空间

2. 若是想让程序更加简洁时。spa

咱们下面来看看普通的加法函数:对象

def add(x,y):ip

    a=x+y内存

    return a博客

咱们再来使用匿名函数的方法:效率

a=lambda x,y:x+yimport

这样是否是简洁了不少?

a=lambda x,y:x+y

print(a(1,2))

输出结果为:

3

 

那么我来说解一下匿名函数的应用,匿名函数能够和map,reduce,filter相结合使用。

①map:

map() 会根据提供的函数对指定序列作映射。

如今先来一段程序理解如下:

list1=[1,2,3,4,5]

def multiply(x):

    return x**2

a=map(multiply,list1)

print(a)

输出结果:

<map object at 0x000001F25C276F98>

因而在代码尾,再加一句print(list(a))

输出结果:

<map object at 0x000001F25C276F98>

[1, 4, 9, 16, 25]

看到这儿,应该明白了map的做用,我用通俗易懂的方式写出map的公式和做用:

a=map(函数,列表),用括号内的函数的功能去实现列表里的每个元素。

那么输出结果在Python3.x中返回迭代器(在Python2.x中返回列表),承载着几个数据,故正确的打印应该是print(list(a))

咱们在上面已经提到了能够跟匿名函数结合运算:

list1=[1,2,3,4,5]

a=map(lambda x:x**2,list1)

print(list(a))

输出结果:

[1, 4, 9, 16, 25]

咱们能够看到,跟匿名函数结合以后,代码变得更加简洁有效。

 

②reduce:

reduce() 函数会对参数序列中元素进行累积。

如今一段程序理解一下:

def add(x,y):

    return x+y

list2=[1,2,3,4,5]

a=reduce(add,list2)

print(a)

咱们运行的时候,却发现报了reduce的错,缘由在于:

在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它如今被放置在 functools 模块里,若是想要使用它,则须要经过引入 functools 模块来调用 reduce() 函数:

from functools import reduce

 

def add(x,y):

 

    return x+y

 

list2=[1,2,3,4,5]

 

a=reduce(add,list2)

 

print(a)

输出结果是:

15

那么为何打印的时候,不是print(list(a))呢?要注意,这个函数的输出结果是一个数,而不是几个数据,可是依然输出到了迭代器。

a=reduce(函数,列表),用括号内的函数去累加处理列表的每个元素。也就是说,若是函数是乘法函数,那么输出结果就是列表中全部元素相乘的值。

那么如今咱们就用匿名函数与reduce相结合来试试乘法:

from functools import reduce

list2=[1,2,3,4,5]

a=reduce(lambda x,y:x*y,list2)

print(a)

输出结果:

120

 

③filter:

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

这个filter的运做方式是和map同样的,输出结果也是几组数据:

def is_1(x):

    return x == 1

list3=[1,2,5,1,6,1]

a=filter(is_1,list3)

print(list(a))

输出结果:

[1,1,1]

a=filter(函数,列表),用括号内的函数去筛选过滤列表的每个元素。

一样的,咱们依然能使用匿名函数的方法去简化:

list3=[1,2,5,1,6,1]

a=filter(lambda x:x==1,list3)

print(list(a))

输出结果:

[1,1,1]

 

如今我讲完了匿名函数与map,reduce和filter相结合的方法,咱们来总结一下:

这三个的输出结果都是到迭代器,处理的对象是列表。

匿名函数可让代码变得更加简洁效率化,减小占用内存。

那么,匿名函数与map,reduce和filter相结合的这种方法,究竟属于什么样的编程呢?

咱们把这种方式叫作命令式编程。

那么,还有一种编程方式,天然是函数式编程,函数式编程能够说已经贯穿了以前的博客,由于:

函数式编程是用def,for,if,else等等来完成。

 

咱们在写代码的时候,要学会取舍命令式编程和函数式编程的使用,不一样的状况下作出不一样的选择。

那么我就啰嗦一下函数式编程中的一些可以更简洁的方法吧:

这个方法叫作三元表达式:

x=2

y=1

z=x if x >y else y 

print(z)

输出结果:

2

很显然,三元表达式极大简化了代码,但愿你们也注意一下这种表达式的应用。

相关文章
相关标签/搜索