函数式编程

一、匿名函数

  1.特点:

    1)当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便,可以把匿名函数作为返回值返回。

    2)匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。如果要返回多个值时(多个逗号),多个值用括号括起来。但是可以有多个参数。

    3)用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。

  2.表示方法:关键字lambda表示匿名函数,冒号前面的x表示函数参数。

    # 匿名函数
    f1 = lambda x: x ** 2
    v1 = f1(3)
    print(v1)  # 9


    # 上面的匿名函数相当于下面的函数
    def f2(x):
        return x ** 2


    v2 = f2(3)
    print(v2)  # 9

 

 二、高阶函数:函数的参数是另一个函数的名称,或者函数的返回值是另一个函数的名称。

  1.map函数:

    1)一共有两个参数,第一个参数是运算逻辑,可以是匿名函数或者是其他函数名,第二个参数是可迭代对象。将第二个参数的每一个元素传入第一个参数中进行处理。

    2)map函数返回的是一个迭代器。

    value = map(lambda x: x.upper(), "xyz")
    print(value)  # <map object at 0x00000289B5ECFF98>:返回一个迭代器
    print(list(value))  # {'Y', 'X', 'Z'}:进行处理

 

   2. filter函数:

    1)一共有两个参数,第一个参数是运算逻辑,可以是匿名函数或者是其他函数名,第二个参数是可迭代对象。

      将第二个参数的每一个元素传入第一个参数中进行处理,然后根据返回值是True还是False决定保留还是丢弃该元素。

    2)filter函数返回的是一个迭代器。

    value = filter(lambda x: x.endswith("xy"), ["zxvy", "asdxy", "opxyk", "xylp"])
    print(value)  # <filter object at 0x000002059A9F4940>
    print(list(value))  # ['asdxy']

 

   3.reduce函数:合并数据

    1)一共有三个参数,第一个参数是运算逻辑,可以是匿名函数或者其他函数名,但是此函数的参数必须有两个。reduce函数第二个参数是可迭代对象。

      reduce函数把第一个参数的运算结果继续和可迭代对象的下一个元素做逻辑运算。第三个参数可有可无,如若有,则先作为参数传入reduce函数的第一个参数函数的运算中。

    2)reduce函数返回的是运算结果。    

    from functools import reduce

    value1 = reduce(lambda x, y: x + y, [1, 4, 7])
    print(value1)  # 12

    value2 = reduce(lambda x, y: x + y, [1, 4, 7], 10)
    print(value2)  # 22
posted @ 2019-10-27 15:47  阿阿Sun  阅读(146)  评论(0)    收藏  举报