第021讲:函数:lambda表达式
第021讲:函数:lambda表达式
测试题
0. 请使用lambda表达式将下边函数转变为匿名函数?
def fun_A(x, y=3):
return x * y
lambda x, y=3 : x*y
# 有幸错了一次,问题出在 list(lambda x,y=3 : x*y)
# 不应该用list
1. 请将下边的匿名函数转变为普通的屌丝函数?
lambda x : x if x % 2 else None
def odd(x):
if x % 2:
return x
else:
return None
2. 感受一下使用匿名函数后给你的编程生活带来的变化?
- Python 写一些执行脚本时,使用匿名函数就可以省下定义函数的过程,比如说我们只是需要写一个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后再写调用,使用匿名函数就可以使得代码更加精简
- 对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名也是比较头疼的问题,使用匿名函数就不需要考虑命名问题了
- 简化代码的可读性,由于普通的屌丝函数阅读经常要跳到开头 def 定义部分,使用匿名函数就可以省去这样的步骤
3. 你可以利用 filter() 和 lambda 表达式快速求出 100 以内所有 3 的倍数吗?
list(filter(lambda x: not x%3, range(1,100))) # x%3 返回x除以3的余数不等于0的值(True),not x%3 即返回x除以3等于0的值(False)
4. 还记得列表推导式吗?完全可以使用列表推导式代替 filter() 和 lambda 组合,你可以做到吗?
[x for x in range(1,100) if not x%3]
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 表达式
temp_a = [1,3,5,7,9]
temp_b = [2,4,6,8,10]
list(map(lambda x,y:[x,y], temp_a,temp_b))
6. 请目测以下表达式会
打印什么?
def make_repeat(n):
return lambda s : s * n # 函数make_repeat 中的匿名函数,返回值是 s*n
double = make_repeat(2) # 给函数 make_repeat 一个参数 2 ,匿名函数返回 s * 2
print(double(8)) # double(8) 这个参数传递给了s,返回值就是 8*2
print(double('FishC'))
>>> print(double(8))
16
>>> print(double('FishC'))
FishcFishc
lambda 语句:
lambda x : 2*x+1
: 符号前面 x 是原函数的参数
: 符号后面是原函数的返回值
filter 函数:
filter(None, temp)
第一个参数是过滤规则,保留True
第二个参数是可迭代数据
map 函数:
map(规则, 迭代数据)
将迭代数据中每一个数据拿出来用指定规则计算
Python语言学习菜鸟 老家四川南充,来玩留言,嘻嘻
话说觉得这个主题难受的请下面评论