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

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

	def fun_A(x, y = 3):  
	    return x * y  

使用lanbda表达式:

	>>> f = lambda x, y = 3 : x * y  
	>>> f(3)  
	9  
	>>> f(3,4)  
	12  
1.请将下边的匿名函数转变为普通的屌丝函数?
	lambda x : x if x%2 else None 

转变后:

	def fun1(x):  
	    if x%2:  
	        return x  
	    else:  
	        return None 

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

	>>> 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的倍数吗?

>>> 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组合,你可以做到吗?

就以上题为例:

>>> 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会将两个数以元组的形式绑定在一起,例如:
>>> 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,y : [x,y],range(1,10,2),range(2,10,2)))  
[[1, 2], [3, 4], [5, 6], [7, 8]]  

map表达式可以接受多个序列作为参数。

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

def make_repeat(n):  
	return lambda s : s * n  
	  
double = make_repeat(2)  
print(double(8))  
print(double('FishC'))  

会打印

16
FishCFishC 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值