乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

  • AIOps

  • Python

    • 基础知识

      • Python之链表
      • Python 之类的初识
      • Python之函数式编程
        • 一、map
        • 二、reduce
        • 三、filter
        • 四、sorted
        • 五、总结
      • Python之匿名函数
      • Python之自定义函数
      • Python之异常处理
      • Python之条件与循环
      • Python之列表生成式
      • Python之生成器
      • Python之装饰器
      • Python之迭代器
      • Python之进程、线程、协程
      • Python之深浅拷贝
      • Python之反射
      • Python之并发编程
      • Python之垃圾回收机制
      • Python之断言assert
      • Python之上下文管理器和with语句
      • Python中JSON的对应关系
      • Python之单例模式
    • Django框架

    • 其他

  • DevOps

  • 专栏
  • Python
  • 基础知识
乔克
2025-07-19
目录

Python之函数式编程

函数式编程的特点就是允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

python 中函数式编程主要用到下面 4 个基础函数:

(1)、map()

(2)、reduce()

(3)、filter()

(4)、sorted()

还有一个匿名函数 lambda()往往和它们配合使用。

# 一、map

map()函数常见的调用方式如下:

map(function, interable)
1

map()函数中的两个参数是必填的,其中第一个参数是一个函数名或匿名函数,第二个参数是一个可迭代对象,如列表、元组等。

map()函数实现的功能就是把 interable 中的元素依次传入 function 中执行并返回结果,在 python2.x 中是将结果组成一个新的 list 返回,在 python3.x 中是返回一个 map 对象,要取得 map 对象里得内容可以用 list()方法,也可以通过循环遍历。

如下例子(python3):

>>> map(lambda x: x*2, [1,2,3,4,5])
<map object at 0x0000013D497E92E8>
>>> list(map(lambda x: x*2, [1,2,3,4,5]))
[2, 4, 6, 8, 10]
>>> for i in map(lambda x: x*2, [1,2,3,4,5]):
...     print(i)
...
2
4
6
8
10
>>>
1
2
3
4
5
6
7
8
9
10
11
12
13

当然,map()还是可以传入多个 interable 对象,如下:

>>> list(map(lambda x,y: x+y, [1,2,3,4,5], [6,7,8,9,10]))
[7, 9, 11, 13, 15]
>>>
1
2
3

在传入多个 interable 对象的时候,首先你的函数体的接受多个参数,比如传入上面例子,传入两个 interable 对象,函数的接受参数也是两个,即 x,y。当传入多个 interable 对象的时候,函数是依次从 interable 对象中取值,然后组成一个新的元组,最后将元组传个 function,如上例子,第一次取(1,6)传入 function 得出结果 7,第二次取(2,7)得出结果 9,依次类推。

# 二、reduce

在 python3 中,reduce()已经从全局名字空间里移除了,它现在被放在functools模块中了,要使用需要先导入模块,reduce()函数常见的调用方式如下:

from functools import reduce
reduce(function, interable)
1
2

其中第一个参数是一个函数名或匿名函数,第二个参数是一个可迭代对象,第三个参数是一个初始值(可选参数),它的功能是返回函数的计算结果。如下:

>>> from functools import reduce
>>> reduce(lambda x,y: x+y, [1,2,3,4,5])
15
>>> reduce(lambda x,y: x*y, [1,2,3,4,5])
120
>>> reduce(lambda x,y: x*y, [1,2,3,4,5],100)
12000
1
2
3
4
5
6
7

reduce()的工作原理是,依次取 interable 对象中的一个元素,和上次的结果做计算,最后返回结果。如果没有传入默认参数,那么第一次计算的时候第一个参数作为结果,从第二个参数开始传值。如果有默认参数,那么直接从第一个参数和默认值进行计算,依次下去。

# 三、filter

filter()函数的调用格式如下:

filter(function, iterable)
1

filter()函数的两个参数,第一个是函数名或者匿名函数,第二个是可迭代对象,比如列表等。filer()函数和 map()函数比较类似,都是依次从 interable 对象中取值传入 function 中计算的出结果,不同的是 filter()函数会判断每次执行结果的 bool 值,并只将 bool 值为 True 的筛选出来,在 python2 中依然返回的是一个列表,在 python3 中返回的是一个 filter 对象,获取里面的值可以用 list()方法和循环等。如下:

>>> list(filter(lambda x: x/2, [1,2,3,4,5]))
[1, 2, 3, 4, 5]
>>> list(filter(lambda x: x%2, [1,2,3,4,5]))
[1, 3, 5]
>>>
1
2
3
4
5

# 四、sorted

sorted()函数的调用方式如下:

sorted(iterable, key=None, reverse=False)
1

参数说明如下:

interable,是一个可迭代对象,比如列表,元组等;

key,主要是用来比较的元素,只是一个参数,具体的参数是取自可迭代对象中,指定可迭代对象中一个元素来进行排序;

reverse,排序规则,reverse=True 表示降序,reverse=False 表示升序,默认是 False;

如下例子:

>>> sorted([1,9,8,2,3])
[1, 2, 3, 8, 9]
>>> sorted([1,9,8,2,3], reverse=True)
[9, 8, 3, 2, 1]
>>> sorted(L, key=lambda x:x[1])
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]
>>>
1
2
3
4
5
6
7

# 五、总结

函数式编程的好处如下:

(1)、代码更为简洁;

(2)、代码中没有循环体,少了很多临时变量,逻辑也更为简单;

(3)、数据集,操作和返回值都放在了一起;

作者:乔克

本文链接:https://jokerbai.com

版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性-相同方式共享 4.0 国际 (CC-BY-NC-SA-4.0) 许可协议。转载请注明出处!

上次更新: 2025/07/19, 11:33:23
Python 之类的初识
Python之匿名函数

← Python 之类的初识 Python之匿名函数→

最近更新
01
使用 Generic Webhook Trigger 触发 Jenkins 多分支流水线自动化构建
07-19
02
使用Zadig从0到1实现持续交付平台
07-19
03
基于Jira的运维发布平台
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式