ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

      • 常见规范与运行方式
      • 变量与垃圾回收机制
      • 输入与格式化输出
      • 运算符
      • 流程控制语句
      • 浅拷贝和深拷贝
      • 常用数据类型与分类
      • 数据类型方法
      • 字符编码
      • 文件操作
      • 函数与参数
      • 命名空间与作用域
      • 闭包函数与装饰器
      • 迭代器与生成器
      • 三元表达式与生成式
      • 函数递归
      • 面向过程式和函数式编程
        • 面向过程式编程
        • 函数式编程
      • 模块与包
      • 程序设计目录参考
      • 常用内置模块或函数
      • 序列化和猴子补丁
      • 日志模块-logging
    • 类与面向对象

    • 并发编程

    • Web编程

    • 模块笔记

    • 其他

  • C笔记

  • C++笔记

  • Arduino笔记

  • Dev
  • Python笔记
  • 基础知识
Hoshinozora
2023-02-15
目录

面向过程式和函数式编程

# 面向过程式编程

# 介绍

解决问题时,始终思考过程二字,过程即流程,指的做事的步骤:先什么,再什么,后什么

基于该思想编写程序就好比在设计一条流水线,先想好流程,然后再进行编程。

# 优点

复杂的问题拆分成一个个小问题,进而流程化、简单化。

# 缺点

耦合性弱,扩展性差,只能针对目前问题进行解决,可能无法直接拿到其他地方用。

当对某一阶段进行修改,那么其他与他有关的阶段,可能也需要跟着进行修改。

# 使用场景

不需要频繁更迭,应用场景相对固定:比如脚本文件、数据分析程序、特定功能等等。

即便一个软件需要更迭,也并不代表这个软件的所有部分都需要一起更迭。

# 函数式编程

# 介绍

函数式更加注重的是执行结果,而非执行的过程。它更加复杂,可读性差且维护性差,但是结果更加准确。

python并非函数式编程语言,但保留了一些符合python哲学思想的函数式编程的特性。

如:lambda、map、reduce、filter

# 有名函数

即是用def定义的函数。

def 函数名(参数):
    函数体
    return
1
2
3

# 匿名函数

没有名字的函数。用于临时调用一次的场景,更多的是将匿名函数与其他函数配合使用的场景。用完后引用计数为0,会被当垃圾回收掉。

我们可以使用lambda关键字定义匿名函数。

# lambda

lambda 形参:表达式 会将函数体表达式的结果作为返回值返回。

例如:lambda x,y:x+y

# 使用方式一 (正确用法)

为某一个函数应用一次,将匿名函数对象传入函数,等函数调用完就销毁该匿名函数。

如max()函数,如果要迭代字典的值,就需要指定一个函数,max函数会将字典的键名作为参数传递给指定的函数,然后将返回值作为比较的依据。

dic1 = {'a':123,'b':321,'c':112}
ret = max(dic1,key=lambda k:dic1[k])
print(ret)
1
2
3
# 使用方式二 (有时会用)

(lambda 形参:函数体)(实参) 直接将lambda函数用括号括起,然后直接作为函数对象进行调用。

ret = (lambda x,y:x+y)(1,2)
print(ret)
1
2
# 使用方式三 (不使用)

将函数对象赋值给名称再调用,与匿名函数的作用相悖,所以不会使用。

func = lambda 形参:函数体
print(func(1,2))
1
2
#面向过程#函数式编程#匿名函数
函数递归
模块与包

← 函数递归 模块与包→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式