第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(规则, 迭代数据)
        将迭代数据中每一个数据拿出来用指定规则计算
posted @ 2021-06-11 15:30  田二爷  阅读(173)  评论(0)    收藏  举报