python及编程范式

编程范式

编程范式是一种基于特定的理论和原则来指导程序设计和开发风格的模型。它定义了编程语言的结构、风格、元素以及编写程序时应遵循的规则。不同的编程范式提供了不同视角来解决问题,影响着代码组织方式、执行流程以及如何表达程序逻辑。

OOP和FP

函数式编程(FP)和面向对象编程(OOP)是两种主要的编程范式,它们在核心概念和设计哲学上有显著的区别。理解这些差异有助于选择最适合特定项目或问题域的范式。

面向对象编程(OOP)的核心概念:

  1. 封装:隐藏对象的内部状态和复杂性,只暴露操作对象所需的方法。这有助于减少系统复杂性并增加安全性。
  2. 继承:允许新创建的类继承现有类的属性和方法。这促进了代码重用,并能建立一个层次化分类体系。
  3. 多态性:允许不同类的对象对同一消息作出响应,并且可以以多种形式表现,提高了程序的灵活性和可扩展性。
  4. 对象:是OOP中基本构建块,它将数据与操作数据的行为捆绑在一起。

函数式编程(FP)核心概念:

函数式编程(Functional Programming,简称 FP)是一种编程范式,它将计算视为数学函数的评估,并避免改变状态和可变数据。在函数式编程中,函数是一等公民(first-class citizens),这意味着它们可以作为参数传递给其他函数、作为值返回以及赋值给变量。

  1. 不可变性(Immutability):数据对象在被创建后其状态就不会再改变。任何修改都会产生一个新的对象,而原对象保持不变。
  2. 纯函数(Pure Functions):函数的输出仅依赖于输入参数,不依赖于任何外部状态或数据的改变。这样确保了相同的输入总是产生相同的输出,没有副作用。
  3. 高阶函数(Higher-order Functions):可以接受函数作为参数或将函数作为结果返回的函数。
  4. 函数组合(Function Composition):通过组合多个函数来构建复杂的操作,每个函数接收前一个函数的输出作为输入。
  5. 惰性评估(Lazy Evaluation):表达式不是在绑定到变量时立即求值,而是在其值真正需要时才求值,可以提高性能并处理无限数据结构。

核心区别:

  • 状态管理与副作用: OOP鼓励通过改变对象内部状态来管理程序流;而FP倾向于使用不可变数据结构和纯粹无副作用功能来避免共享状态问题。
  • 数据与行为: 在OOP中,行为依附于数据(即方法属于对象),而在FP中,数据与行为分离;功能通常被视为独立存在并处理外部数据。
  • 代码组织方式: OOP通过创建包含属性和方法集合体(如类)来组织代码;而FP则更倾向于使用小型、目标明确且可重用功能进行组合。

每种范式都有其优点及适应场景。例如,在需要高度模块化、易测试及并发处理时可能会偏好使用FP;而在需要强调实体之间关系、易理解及自然映射现实世界问题时,则可能偏好OOP。实际开发过程中经常会看到两者结合使用以取长补短。

其他

除了函数式编程(Functional Programming, FP)和面向对象编程(Object-Oriented Programming, OOP)之外,还有多种编程范式,每种都有其独特的方法论和用途。以下是一些常见的编程范式:

  1. 命令式编程(Imperative Programming)

    • 命令式编程是最古老和最直观的一种范式,它通过计算机理解的指令序列来描述计算过程。程序状态通过赋值语句改变。
    • 示例语言:C、Pascal。
  2. 声明式编程(Declarative Programming)

    • 与命令式相对,声明式编程关注于“做什么”而非“怎么做”。它允许开发者表述他们想要的结果而不需要详细说明如何达到这个结果。
    • 函数式编程就是声明性编程的一个子集。
  3. 逻辑编程(Logic Programming)

    • 逻辑编程基于形式逻辑。程序由一系列事实和规则组成,执行查询时会进行推理以得出结论。
    • 示例语言:Prolog。
  4. 结构化编程(Structured Programming)

    • 强调使用顺序执行、条件执行、循环等控制结构来创建清晰结构化的程序。它避免使用跳转语句如goto。
    • 这是对早期非结构化代码的反应,并且促进了更可靠和易于理解的代码开发。
  5. 面向切面编程(Aspect-Oriented Programming, AOP)

    • 面向切面编程关注于横切关注点或方面,例如日志记录、安全性等通常散布在多个模块中但与业务逻辑分离的功能。
    • 它允许将这些方面模块化,并且可以动态地添加到主业务逻辑中去。
  6. 事件驱动编程(Event-Driven Programming, EDP):

    • 程序流由事件控制,如用户操作、传感器输出或消息传递等。这种范例在图形用户界面设计、游戏开发以及实时系统中非常普遍。
  7. 并发/并行 编码 (Concurrent/Parallel programming):

    • 关注于同时运行多个计算任务。并发指两个任务可以在重叠时间段内启动、运行,并完成;并行则指两个或更多任务同时运行。
    • 这种范例对于提高大型数据处理任务和高性能计算应用程序效率至关重要。
  8. 响应式 编码 (Reactive programming):

    • 是一种异步数据流处理概念,在此架构下数据变化会自动传播出去从而引起相应变更,在现代Web开发及移动应用中尤为流行。

每种范例都有其特定场景下优势与局限性。现代软件开发往往采取混合范例方法以利用各自优势解决复杂问题。

python的编程范式

Python是一种多范式编程语言,支持多种编程范式,包括但不限于:

  1. 面向对象编程(Object-Oriented Programming, OOP):Python提供了类、继承、封装和多态等面向对象的特性。通过定义类并创建实例来使用。

  2. 命令式编程(Imperative Programming):Python允许开发者以命令的方式逐步改变程序的状态,通过赋值、分支和循环控制结构来表达算法。

  3. 函数式编程(Functional Programming, FP):虽然Python不是纯函数式编程语言,但它提供了许多函数式特性,如高阶函数、匿名函数(lambda)、内置的map和reduce函数等。

  4. 过程化编程(Procedural Programming):在这种范式下,程序被设计为一系列过程或功能调用。Python支持通过定义和调用函数来进行过程化设计。

  5. 声明式编程(Declarative Programming):虽然通常不将Python视为声明式语言,但它在某些方面如列表推导、字典推导等提供了声明性表达数据处理的能力。

  6. 反应式编码 (Reactive programming): 通过第三方库如RxPy (Reactive Extensions for Python),Python也可以实现响应式编码模型进行异步数据流处理。

因此,可以说Python是一种非常灵活的语言,它允许开发者根据问题域选择最合适的范例进行解决方案设计。这种灵活性使得Python成为一个强大且广泛应用于各个领域如Web开发、数据科学、人工智能等领域的语言。

示例

下面是针对每种范式在Python中的简单示例:

命令式编程(Imperative Programming)

命令式编程强调如何执行任务,即明确地指出程序应该按顺序执行哪些步骤。

# 计算列表中所有数值的平方
numbers = [1, 2, 3, 4]
squares = []
for number in numbers:squares.append(number ** 2)
print(squares) # 输出: [1, 4, 9, 16]

声明式编程(Declarative Programming)

声明式编程关注于想要完成什么而非怎样完成,更加抽象。

# 使用列表推导实现相同功能
numbers = [1, 2, 3, 4]
squares = [number ** 2 for number in numbers]
print(squares) # 输出: [1 ,4 ,9 ,16 ]

函数式编程(Functional Programming)

函数是一等公民,强调无副作用和数据不可变性。

# 使用map函数实现相同功能
numbers = [1 ,2 ,3 ,4 ]
squares = list(map(lambda x: x**2,numbers))
print(squares) # 输出:[1 ,4 ,9 ,16 ]

面向对象程序设计 (Object-Oriented Programming)

基于“类”和“对象”的概念设计软件;类定义了数据格式和可用方法。

class NumberSquare:def __init__(self,numbers):self.numbers=numbersdef calculate_sqaures(self):return[number**2 for number in self.numbers]my_numbers=NumberSquare([1 ,2 ,3 ,4 ])
print(my_numbers.calculate_sqaures()) #输出:[1 ,4 ,9 ,16 ]

通过这些示例可以看到,在Python中你可以采取不同的方式来解决相同的问题,这体现了它作为一个多范型语言所具有的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3监听input保留两位小数点

监听input输入框校验 再次记录下&#xff0c;这里没封装&#xff0c;仅演示~ 保留2位小数 只能输入数字和两位小数 <el-inputv-model"form.amount"oninput"valuevalue.replace(/[^0-9.]/g,).replace(/\.{2,}/g,.).replace(/^(\-)*(\d)\.(\d\d).*$/,$1$2.$3…

(2024,MixLoRA,任务干扰,独立因子选择,条件因子选择)使用 LoRA 的条件混合进行多模态指令调优

Multimodal Instruction Tuning with Conditional Mixture of LoRA 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 任务干扰在多模态指令调优中的 LoRA 应用 3.1 背景&am…

小甲鱼Python07 函数初级

一、创建和调用函数 pass语句表示一个空的代码块&#xff0c;我们经常先写好函数&#xff0c;pass占一个坑&#xff0c;等规划好之后再来填坑。 函数也是可以指定参数的&#xff0c;我们会把参数传进去用来替代形参。 在Python里如果想要返回值&#xff0c;不需要指定函数的返…

仿牛客网项目---显示评论和添加评论功能的实现

这篇文章&#xff0c;我来介绍一下我的项目中的另外一个功能&#xff1a;显示评论和添加评论。 其实这两个功能都不怎么重要&#xff0c;我感觉最重要的应该是用户注册登录功能&#xff0c;这个也了解一下&#xff0c;知道这么一回事儿就好。 首先设计DAO层。 Mapper public …

python实现AES加密解密

1. 前言 AES是一种对称加密&#xff0c;所谓对称加密就是加密与解密使用的秘钥是一个。 之前写过一片关于python AES加密解密的文章&#xff0c;但是这里面细节实在很多&#xff0c;这次我从 参数类型、加密模式、编码模式、补全模式、等等方面 系统的说明如何使用AES加密解密…

直观理解卷积

卷积直观理解 原文来自最容易理解的对卷积(convolution)的解释 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致…

从经典学习 NLP:小白到大白:1. Word Tokenization

文章目录 1 Word Tokenization1.1 Top-down/rule-based tokenization1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm 1 Word Tokenization 来源&#xff1a;JM3 Chapter 2.5 p19-23 tokenization 就是 把 running text 分割成为 words&#xff1b; 常有两种方…

AVL 树

AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决…

k8s笔记26--快速实现prometheus监控harbor

k8s笔记26--快速实现prometheus监控harbor 简介采集指标&配置grafana面板采集指标配置grafana面板 说明 简介 harbor是当前最流行的开源容器镜像仓库项目&#xff0c;被大量IT团队广泛应用于生产、测试环境的项目中。本文基于Harbor、Prometheus、Grafana介绍快速实现监控…

3. 台阶问题

数楼梯 题目描述 楼梯有 N N N 阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 输入格式 一个数字&#xff0c;楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4样例输出 #1 5提示…

FPGA之带有进位逻辑的加法运算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 综合结果如下图所示&#xff1a; 使用了6个Lut&#xff0c;&#xff0c;6个LUT分布…

详细介绍如何用windows11自带Hyper-V安装虚拟机

通过系统自带的hyper-v安装windows11&#xff0c;舒服又惬意&#xff0c;相比用第三方虚拟机软件速度快很多。 硬件准备 1、对于电脑自带的虚拟机Hyper-V&#xff0c;不是每种电脑系统版本都带着的。我们先要确定您的系统符合 Hyper-V 的最低要求。我们跟着下面的步骤来执行&…

鸿蒙开发相关知识(四)【数据持久化(用户首选项、关系型数据库)、通知(基础通知、进度条通知、通知意图)】

文章目录 一、数据持久化1、用户首选项&#xff08;1&#xff09;语法说明&#xff08;2&#xff09;完整代码示例 2、关系型数据库&#xff08;1&#xff09;初始化数据库&#xff08;2&#xff09;增删改数据&#xff08;3&#xff09;查询数据&#xff08;4&#xff09;完整…

《2023年勒索软件攻击态势报告》

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取码&#xff1a;2lo0

探索数据结构:解锁计算世界的密码

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty‘s blog 前言 随着应用程序变得越来越复杂和数据越来越丰富&#xff0c;几百万、…

600万订单每秒Disruptor +SpringBoot,如何解决消息不丢失?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; Disruptor 官方说能达到每秒600w OPS订单处理能力&…

Java——Object

1.Object万类之祖 1.1 Object类型的概述 Object类是所有类型的顶层父类&#xff0c;所有类型的直接或者间接的父类&#xff1b;所有的类型中都含有Object类中的所有方法。 随意定义一个类型,不手动显式定义其父类&#xff0c;那么这个类的父类就是Object类 public Object() …

【C语言】指针初阶2.0版本

这篇博文我们来继续学习指针的其他内容 指针2.0 传值调用与传址调用传值调用传址调用 一维数组与指针理解数组名使用指针深入理解一维数组 二级指针指针数组二维数组与指针 传值调用与传址调用 在开始之前&#xff0c;我们需要先了解这个概念&#xff0c;后面才能够正常的学习…

利用 Python 抓取数据探索汽车市场趋势

一、引言 随着全球对环境保护意识的增强和技术的进步&#xff0c;新能源汽车作为一种环保、高效的交通工具&#xff0c;正逐渐受到人们的关注和青睐。在这个背景下&#xff0c;对汽车市场的数据进行分析和研究显得尤为重要。 本文将介绍如何利用 Python 编程语言&#xff0c;结…

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

引言劝退 VSCode&#xff0c;全称为Visual Studio Code&#xff0c;是由微软开发的一款轻量级&#xff0c;跨平台的代码编辑器。大家能来搜用VSCode配置c/c&#xff0c;想必也知道VSCode的强大&#xff0c;可以手握一个VSCode同时编写如C&#xff0c;C&#xff0c;C#&#xff…