小甲鱼Python3学习笔记之第二十一讲(仅记录学习)

第二十一讲:Lambda表达式

一、知识点:

0.lambda表达式:lambda函数是一种快速定义单行的最小函数,是从lisp借用来的,可以用在任何需要函数的地方。下面的例子比较了传统的函数定义def和lambda定义方式:

>>> def func(x,y):
	return x*y

>>> func(2,3)
6
>>> i = lambda x,y:x*y
>>> i(2,3)
6

注意事项:lambda函数可以接收任意多个参数(包括可选参数)并且返回单个表达式的值。lambda函数不能包含命令,包含的表达式不能超过一个。

lambda表达式的作用:

1)lambda表达式可以省下定义函数的过程,不用专门定义一个函数再写调用,使用lambda可以使代码更精简。

2)有些只需要调用一两次的函数,使用lambda不需要考虑函数命名的问题。

3)简化代码的可读性,省去def()定义过程。

1.两个重要的BIF:

filter(func or none,iterable):两个参数为函数和可迭代的序列,函数定义了过滤的规则,默认过滤出真的部分。例如:

>>> def odd(x):
	return x%2

>>> temp = range(10)
>>> show = filter(odd,temp)
>>> list(show)
[1, 3, 5, 7, 9]

>>> list(filter(lambda x:x%2,range(10)))
[1, 3, 5, 7, 9]

map(func or none,iterable):同filter()的两个参数相同,这个内置函数的作用是将序列的每一个元素作为函数的参数进行运算加工,直到可迭代序列的每个元素都加工完毕,返回所有加工后的元素构成的新序列。

>>> list(map(lambda x:x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
----------------------------------------------------我是一条分割线------------------------------------------------------

二、课后作业:

0.请使用lambda表达式将下列函数转变为匿名函数。

>>> def fun_A(x,y=3):
	return x*y
答案:>>> i = lambda x,y=3:x*y

1.请将下边的匿名函数转变为普通的屌丝函数。

lambda x:x if x%2 else None
>>> def func(x):
	if x%2:
		return x
	else:
		return None

2.感受一下使用匿名函数后给你的编程生活带来的变化。

1)lambda表达式可以省下定义函数的过程,不用专门定义一个函数再写调用,使用lambda可以使代码更精简。

2)有些只需要调用一两次的函数,使用lambda不需要考虑函数命名的问题。

3)简化代码的可读性,省去def()定义过程。

3.你可以使用filter()和lambda表达式快速求出100以内所有3的倍数吗?
>>> list(filter(lambda x:x if x%3==0 else None,range(101)))

4.还记得列表推导式吗?完全可以使用列表推导式代替filter()和lambda组合,你可以做到吗?

>>> list = [x for x in range(1,100) if x%3 ==0]

5.还记得zip吗?使用zip会将两数以元组的形式绑定在一起,例如:

>>> list(zip([1,3,5,7,9],[2,4,6,8,10]))
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
但如果我希望打包的形式是灵活多变的列表而不是元组(希望是[[1,2],[3,4],[5,6],[7,8],[9,10]]这种形式),怎么做?
>>> list(map(lambda x,y:[x,y],[1,3,5,7,9],[2,4,6,8,10]))
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

6.请目测一下表达式会打印什么?

>>> def make_repeat(n):
	return lambda s:s*n

>>> double = make_repeat(2)
>>> print(double(8))
>>> print(double('FishC'))

16

FishCFishC

double=make_repeat(2)等于double = lambda s:s*2

----------------------------------------------------我是一条分割线------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/huashu2017/article/details/80928679
今日推荐