函数式编程

今天主要学习了函数时编程,一个高阶函数的应用,感觉得在解决问题上,的确是简洁了很多,而且比较方便,下面做了一点小结。

匿名函数

  1. 什么匿名函数

1.当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。

2.在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数。

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

4.匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

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

  1. 比如筛选出一个数字序列中的奇数,下面代码实现

    num = list(filter(lambda n: n % 2 != 0,[1,2,3,4,5,6,7]))
     print(num)
     # 运行结果
     [1, 3, 5, 7]
     ​

高阶函数

高阶函数简单地说就是编写高阶函数时,就是让函数的参数接受别的函数,这边我说的高阶函数主要有map、reduce、filter、sorted。

  1. map() 映射

    1. map需要传入两个参数,一个是函数,一个是迭代器。返回一个值,返回的值是一个惰性序列,所以需要把它打印出来要用list().
    2. 高阶函数与普通函数的对比

    分别用普通函数和高阶函数简单计算f(x)=x^2

    • 普通函数

      def num(L):
           L1 = []
           for x in L:
               L1.append(x*x)
           return L1
       L = [1,2,3,4,5,6,7]
       name = num(L)
       print(name)
       # 运行结果
       [1, 4, 9, 16, 25, 36, 49]
    • 高阶函数

      num = map(lambda x: x*x,[1,2,3,4,5,6,7])
       print(list(num))
       # 运行结果
       [1, 4, 9, 16, 25, 36, 49]
  2. reduce() 归约

    1. reduce的用法是把一个函数作用在一个序列上,这个函数必须要接受两个参数,reduce把结果继续和序列下一个元素做积累计算。
    2. 比方说一个序列求和,我们就可以用reduce,在用reduce函数时,我们需要导入一个模块。

      from functools import reduce
       num = reduce(lambda x,y:x+y,[1,2,3,4,5,6,7,8,9,10])
       print(num)
       # 运行结果
       55
    3. 到这了,有的人会说,python不是有求和的内置函数sum吗?没有必要动用reduce,但是要把序列[1,3,5,7,9]变换成13579,reduce就可以派上用场了。

      from functools import reduce
       num = reduce(lambda x,y:x*10+y,[1,3,5,7,9])
       print(num)
       # 运行结果
       13579
  3. filter() 过滤、筛选

    1. filter函数和map函数类似,filter()也接收一个函数和一个序列,与map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值True还是False决定保留还是丢弃这个元素。
    2. 例如在一个list中,删掉偶数,只留奇数,可以这么写:

      num = list(filter(lambda n: n % 2 == 0,[1,2,3,4,5,6,7]))
       print(num)
       # 运行结果
       [2, 4, 6]

返回函数

  1. 什么是返回函数

返回函数是函数作为返回值

  1. 例子(当需要求几个相加的时候,就让函数返回值返回一个数字相加的函数,当几个数相减的时候,让函数返回一个相减的函数)

    # 利用flag控制调用相加函数还是相减函数
    def functools(flag):
     # 定义一个相间的函数
     def add(a,b,c,d):
         return a + b + c + d
     # 定义一个相减的函数
     def jian(a,b,c,d):
         return a - b -c - d
     # 判断flag
     if flag == "+":
         return add
     elif flag == "-":
         return jian
    # 返回值赋值给name
    name = functools("-") # name其实就是函数jian()
    # 给name函数传入参数a,b,c,d
    print(name(1,2,3,4))
    ​
    # 运行结果
    -8
最后修改:2021 年 11 月 12 日
如果觉得我的文章对你有用,请随意赞赏