本文是跟着鱼C论坛小甲鱼零基础学习Python3的视频学习的,课后题也是跟随每一课所附属的题目来做的,根据自己的理解和标准答案记录的笔记。
0.请使用lambda表达式将下边函数转变为匿名函数?
def fun_A(x, y = 3):
return x * y
答:
lambda x, y = 3 : x * y
1.请将下边的匿名函数转变为普通的屌丝函数?
lambda x : x if x%2 else None
答:
def funx(x):
if x % 2:
return x
else:
return None
2.感受一下使用匿名函数后给你的编程生活带来的变化?
答:匿名函数方便于创建一个临时使用的函数,特别是在配合一些BIF(内置函数)使用的时候,比如说 fliter() 与 map() ,只是临时需要一个函数过程去进行某段代码程序的时候,匿名函数 lambda 将很方便,不用再去定义命名一个新函数,能够有效地使得代码简洁美观,也提升了代码书写的工作效率。
3.你可以使用filter()和lambda()表达式快速求出100以内所有3的倍数吗?
答:
list(filter(lambda x : x % 3 == 0 , range(100)))
4.你还记得列表推导式吗?完全可以使用列表推导式代替filter()和lambda组合,你可以做到吗?
答:以第三题的要求为例
[x for x in range(100) if x % 3 == 0]
列表推导式 与 filter() 和 lambda 组合的不同在于,列表推导式是按照条件来创建一个列表出来,列表内的元素均符合列表推导式的条件。而 filter() 和 lambda 组合则是依照条件来将某个集合进行筛选出符合条件的元素加入列表当中。在一定程度上来说,两者能做到的事情是相同的。
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]]这种形式),你能做到吗?(采用map和lambda表达式)
答:
#方法一
list(map(lambda x : list(x),zip([1,3,5,7,9],[2,4,6,8,10])))
#方法二
list(map(lambda x,y : [x,y],[1,3,5,7,9],[2,4,6,8,10]))
6.请目测以下表达式会打印什么?
def make_repeat(n):
return lambda s : s * n
double = make_repeat(2)
print(double(8))
print(double('FishC'))
答:会打印出
16
FishCFishC