前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小甲鱼《零基础学习Python》课后笔记(二十一):函数——lambda表达式

小甲鱼《零基础学习Python》课后笔记(二十一):函数——lambda表达式

作者头像
小火柴棒
发布2019-01-11 15:19:19
4290
发布2019-01-11 15:19:19
举报
文章被收录于专栏:石开之旅石开之旅

测试题 0.请使用lambda表达式将下边函数转变为匿名函数?

代码语言:javascript
复制
	def fun_A(x, y = 3):  
	    return x * y  

使用lanbda表达式:

代码语言:javascript
复制
	>>> f = lambda x, y = 3 : x * y  
	>>> f(3)  
	9  
	>>> f(3,4)  
	12  

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

代码语言:javascript
复制
	lambda x : x if x%2 else None 

转变后:

代码语言:javascript
复制
	def fun1(x):  
	    if x%2:  
	        return x  
	    else:  
	        return None 

编写了测试程序,测试通过:

代码语言:javascript
复制
	>>> def fun1(x):  
	    if x%2:  
	        return x  
	    else:  
	        return None  
	  
	      
	>>> f = lambda x : x if x%2 else None  
	>>> for each in range(20):  
	    print(fun1(each), end = '\t')  
	  
	  
	None    1   None    3   None    5   None    7   None    9   None     11  None    13  None    15  None    17  None    19    
	  
	>>> for each in range(20):  
	    print(f(each), end = '\t')  
	  
	      
	None    1   None    3   None    5   None    7   None    9   None    11  None    13  None    15  None    17  None    19    

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

主要感觉就是不用为了取名字而费那么多脑子了;还可以使代码更加精简。 3.你可以使用filter()和lambda()表达式快速求出100以内所有3的倍数吗?

代码语言:javascript
复制
>>> list(filter(lambda x : x%3 == 0,range(100)))  
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]  

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

就以上题为例:

代码语言:javascript
复制
>>> list1 =[x for x in range(100) if x%3 == 0]  
>>> list1  
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

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

代码语言:javascript
复制
>>> 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表达式)

代码语言:javascript
复制
>>> list(map(lambda x,y : [x,y],range(1,10,2),range(2,10,2)))  
[[1, 2], [3, 4], [5, 6], [7, 8]]  

map表达式可以接受多个序列作为参数。 6.请目测以下表达式会打印什么?

代码语言:javascript
复制
def make_repeat(n):  
	return lambda s : s * n  
	  
double = make_repeat(2)  
print(double(8))  
print(double('FishC'))  

会打印

代码语言:javascript
复制
16
FishCFishC 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档