python语言是一种面向过程的语言_浅谈编程语言中的面向过程和面向对象

2023-11-07

最近一直在自学Python,在《Python学习手册》的开篇有一句话——“Python可以定义为面向对象的脚本语言”。

这句话让我十分困惑,并且在之后的一周里面让我总是混淆一些概念,到底什么是“面向对象”?到底什么是“对象”?带着这个疑问,我继续向下学习,查阅了相关资料,直到我在书中找到了这么一句话——“一切皆对象”。我瞬间感觉就像是一束光照进了黑暗的房间,豁然开朗。这句话的大概意思就是你在Python中输入放入一切、在Python中看到的一切都可以称之为“对象”。

讲到这,“对象”这个概念我已经了解了,我继续向下学习,又遇到了一个难题,在书中的某一章中对比了Python和C、JAVA的区别,其中有一点是这样的:

Python——面向对象的语言

C——面向过程的语言

看到这我又开始迷惑了,“面向对象”和“面向过程”到底又是个什么意思呢?我又开始翻书、查资料、知乎,直到我在相关问题下看到了@完美龙小猫的一篇回答:面向过程是编年体;面向对象是纪传体。

在读到这一句话的瞬间,我又感觉像那束光再次照亮了黑暗的屋子,又豁然开朗起来。在此我先解释一下纪传体和编年体的区别。

首先编年体是以年代为线索编排有关历史事件,编年体史书以时间为中心,按年、月、日顺序记述史事,简而言之就是我按时间顺序把一段历史写下来,某某某在什么时间先干了什么后干了什么,接下来要干什么。要记叙的所有东西事先都按时间顺序已经排列好了,我们要做的就是填写在什么时间这个具体的事情是如何发生的。

而纪传体则是以为人物立传记,像司马迁的《史记》就是这一类型,简而言之就是把一段历史分为不同的块,这段历史都是谁参与的,谁做了什么,综合这些人物的块你就可以描述出这段历史的大致样貌。

讲到这,我想那些有编程经历的人或许应该已经明白了“面向对象”和“面向过程”的区别,下面我就具体举一个例子来说明这个问题。

首先我们要明白一个概念,即面向对象编程语言中的“块”。学过Python的人应该都知道Python中一个非常经典的语句:

import xxx

即导入一个模块,这个意思就是说我事先在这个模块下实现了某个功能,你现在要用到这种功能就不需要重新编写一遍,你只需导入我写的这个模块就可以实现你想要的功能了。

好了,我们开始我们的例子。

现在比如让你编写一个机械手臂来打开冰箱取东西的程序。(别担心这里不会出现具体代码,事实上我也是初学者,并不会编写这一段代码。)

那么面向过程编写的代码是这样的:

1.函数f1(机械右手,冰箱):机械右手打开冰箱。

2.函数f2(机械左手,要取的东西):机械左手拿出东西。

3.函数f3(机械右手,冰箱):机械右手关上冰箱。

而面向过程是这样的:

首先定义一个对象——机械手臂,机械手臂具有两个属性,即机械左手和机械右手。接着写出三个方法,即打开冰箱,拿出东西,关上冰箱。

1.机械右手调用方法——打开冰箱

2.机械左手调用方法——取出东西

3.机械右手调用方法——关上冰箱

通过对比以上两种实现机械手臂来打开冰箱取东西的方式,我们可以看出,“面向对象”和“面向过程”的区别:

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向对象”和“面向过程”各有优缺点,但是由于我是学习的面向对象的Python,这里我讲一下面向对象的优点,还是上一个例子,上面例子中的机械手臂是左手拿出东西,我们假设这个机械手臂是一个左撇子,那么要是一个右撇子来打开冰箱该怎么办呢?

如果你是面向过程设计,那么机械手臂的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,即如下过程:

1.机械左手调用方法——打开冰箱

2.机械右手调用方法——取出东西

3.机械左手调用方法——关上冰箱

我们只需把左右手的顺序调换一下即可,不需要像面向过程语言那样重新编写一遍程序。当然面向过程也有着自己的优点,在这里我就不多赘述了,我要去学习Python啦啦啦啦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python语言是一种面向过程的语言_浅谈编程语言中的面向过程和面向对象 的相关文章

  • 使用vue+electron创建桌面软件(二)

    文章目录 打包配置 界面配置 窗口配置 自定义顶部栏 vue electron项目 对软件进行配置 包括打包图标 名称等 自定义窗口最小化 全屏 退出软件 界面信息传递等 打包配置 在vue config js文件中 vue config
  • 射击小游戏c语言实验报告,C++实现简单射击小游戏

    使用c 制作简单的横板射击小游戏 供大家参考 具体内容如下 include include include class Bullet class Tank class E Bullet class Boss bool dead false
  • k8s-某视频课基础了解

    容器编排 Kubernetes Helm 容器引擎 Containerd Rocket 容器镜像仓库 TUF Harbor Notarv 容器网络CNI 服务网格 服务发现 CoreDNS Linkerd Envoy 容器监控运维 Prom
  • [Ubuntu]使用随机数完全格式化整块优盘

    系统对优盘等存储设备的快速格式化 只是做了简单的标记 如果没有进一步的写入操作 内容大概率都还能恢复找回 那个如何彻底的格式化掉一块优盘呢 使用 Ubuntu 我们可以对全盘进行写零或者写随机数操作 1 找到 U 盘路径 sudo fdis
  • 运维进阶:文件共享服务全攻略

    一 了解一下 1 NFS NFS Network File System 即网络文件系统 是FreeBSD支持的文件系统中的一种 它允许网络中的计算机之间通过TCP IP网络共享资源 在NFS的应用中 本地NFS的客户端应用可以透明地读写位
  • np.maximum()的用法

    一 用法 np maximum A B 用于逐元素比较两个array的大小 二 实例 import numpy as np A np array 1 2 3 4 B np array 5 6 7 8 print np maximum A B
  • WPF随笔(十)--使用AvalonDock实现可停靠式布局

    我们每天使用的许多软件都使用了可停靠式布局 可以方便的打开 关闭 收起 展开 移动选项卡 今天就来说明如何使用AvalonDock实现这种可停靠式布局 AvalonDock安装 最新版本的AvalonDock类库包含在程序包Extended
  • Python packaging tools not found的问题解决

    首先 我用的虚拟机装的linux系统 linux自带的python2 7 所以python的安装工具是python2的 当使用python3 6 也就是在在项目中设置python3 6的时候 系统自动调用的是python2的下载工具 所以就
  • mycat学习01之认识mycat

    转载自 Mycat V1 6 0权威指南 pdf 一书
  • 射雕英雄传ol显示服务器断开,射雕英雄传OL5月28日维护更新内容

    为带来更好的游戏体验 射雕英雄传OL 全体服务器将于5月28日上午9 00 12 00期间进行例行停机维护与版本升级 今天小编就给大家带来 射雕英雄传OL 5月28日维护更新内容 此次版本升级详细内容如下 一 新增装备部位 翅膀 1 玩家升
  • 在线瓦片地图服务资源 总结

    常见的公开在线瓦片地图服务汇总 https www cnblogs com amadoGrowers p 13631127 html
  • Android O中修改NotificationChannel 属性,升级app后该修改不生效,必须卸载app重新安装才能生效

    Android 8 0中修改NotificationChannel 属性 升级app后该修改不生效 必须卸载app重新安装才能生效 原代码如下 public void notifyDownloading long progress long
  • 基于centos7的Openssh版本升级

    一 环境准备 yum y install wget tar gcc make 二 上传升级的软件包 zlib 1 2 11 tar gz openssl 1 1 1d tar gz openssh 9 0p1 tar gz 下载地址 zli
  • angular4-X知识点汇总

    1 生成新项目 ng new my app 生成过程会有点长 主要是需要下载很多的包 2 启动开发服务器 npm run start ng serve open ng serve o 3 NgModule是一个装饰器函数 它接收一个用来描述
  • 数星星(树状数组的理解与应用)

    数星星问题 文章目录 数星星问题 前导 问题详情 问题分析 关键语句分析 方法判断 代码 总结 前导 树状数组的原理详见如下链接 链接 https blog csdn net 2302 77698668 article details 13
  • Leptonica PIX 与 Qt QImage 的相互转换

    最近有个项目需要用到 OCR 功能 研究了一下 感觉 Tesseract 还不错 准备在项目中试试 但是发现 Tesseract 底层图像数据用到了 Leptonica 而我的程序准备用 Qt C 来写 这里就涉及一个问题 如何把 QIma
  • 提示Cannot resolve symbol xxx的解决办法

    今天有读者反映在spring boot项目中 已经导入了所有需要的包 但是提示如下错误 Cannot resolve symbol xxx 该错误的解决办法是 1 单击IDEA开发工具的File gt Invalidate Caches R
  • 数据结构视频教程 -《(东南大学 王茜)数据结构 (64讲)》

    整个视频打包下载地址 史上最全的数据结构视频教程系列分享之 东南大学 王茜 数据结构 64讲 转载请保留出处和链接 更多优秀资源请访问 我是码农 数据结构对于从事计算机系统软件和应用软件设计与开发人员非常重要 程序设计语言为数据结构的描述提
  • 基于Spring Boot开发的社区物业管理系统

    文章目录 项目介绍 主要功能截图 登录 车位收费管理 物业收费管理 投诉信息管理 车位管理 保修统计分析 部分代码展示 设计总结 项目获取方式 作者主页 Java韩立 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给

随机推荐

  • 【python教程入门学习】学习Python爬虫前的准备工作

    在使用 Python 编写爬虫程序之前 您需要提前做一些准备工作 这样在后续学习过程中才会得心应手 知识准备 1 Python语言 Python 爬虫作为 Python 编程的进阶知识 要求学习者具备较好的 Python 编程基础 对于没有
  • 浏览器输入url后发生了什么?

    在浏览器输入url后会发生的过程 1 DNS对域名进行解析 2 建立TCP连接 三次握手 3 发送HTTP请求 4 服务器处理请求 5 返回响应结果 6 关闭TCP连接 四次挥手 7 浏览器解析HTML 8 浏览器布局渲染 1 浏览器对输入
  • Flink流和表的转换

    流 表的转换 1 这种方式后续要进行tableSql的操作 推荐 tableEnv createTemporaryView tableName dataStream 2 这种方式后续要进行tableApi的操作不常用 Table table
  • Linux文件权限管理 chmod 读、写、可执行

    使用 ls l 查看文件权限 左侧第一列 rw r r 这些就是文件的权限信息 文件的权限分为三种 三种权限可相互叠加 最高权限为7 权限 字母 对应的二进制 对应的八进制 读 r 100 4 写 w 010 2 可执行 x 001 1 嗯
  • ajax传参数json对象到后台获取

    var data data name pxxx paramData dataSource a1 table t1 field f1 r name1 01 p name2 02 p 10 100 name2 01 p dataSource a
  • 输入若干个整数,当输入0时表示结束,统计每个输入整数的出现次数。

    描述 输入若干个整数 当输入0时表示结束 统计每个输入整数的出现次数 输入 输入若干个整数 整数之间以空格间隔 当输入0时表示结束 输出 分行输出每个整数出现的次数 行末不能有多余空格 输入示例 11 22 35 68 97 63 22 6
  • 内存分页、进程分页、页表长度

    内存分页 进程分页 页表长度 内存分页 内存空间分成一个个大小相等的分区 页框号或物理块号从0开始 每一个分区称作页框 一般大小为 4KB 进程分页 将用户进程的地址空间分为与页框大小相等的一个个区域 页号一般从0开始 每一个分区称作页 一
  • 设计模式:装饰者模式

    定义 动态给一个对象添加一些额外的职责 就象在墙上刷油漆 使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活 设计初衷 通常可以使用继承来实现功能的拓展 如果这些需要拓展的功能的种类很繁多 那么势必生成很多子类 增加系统
  • Latex写文章时插入单栏图片和双栏图片方法

    环境 WinEdt7 0 前言 使用latex写文章 经常需要插入图片 有时插入的图片需要单栏排版 有时插入的图片需要双栏排版 下面汇总单双栏图片插入方法 1 单栏图片 插入单栏图片很简单 许多文章的latex模板里面都有例子 即以下代码
  • 【09】Nginx之缓存集成

    Nginx缓存集成 缓存的概念 缓存就是数据交换的缓冲区 称作 Cache 当用户要获取数据的时候 会先从缓存中去查询获取数据 如果缓存中有就会直接返回给用户 如果缓存中没有 则会发请求从服务器重新查询数据 将数据返回给用户的同时将数据放入
  • html5 try upgrading your browser,用html5做flex的离线应用程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 HTML5 草案的前身名为 Web Application 1 0 HTML5 的目标是保持和当前 HTML 标准 HTM L4 01 以及 HTML 的 XML 版本 XHMTL1 0 向后兼
  • Javase学习必备工具,超详细的OneNote安装使用教程

    为什么要记笔记 方便回顾复习 Java的技术体系庞大 并且每天都有新内容 为了防止遗忘 建议制定有规律的复习计划 笔记是回顾复习的依据 课下自己写的练习代码应该是尝试推翻这些课堂上记录的重点结论 笔记是重要结论的集中地 记笔记在学习中起到很
  • flutter入门自定义实现PopupWindow功能

    https blog csdn net email jade article details 87922051 其实就是自定义一个weight 实现 poproute 构建一个子布局传入即可 1功能显示和隐藏 用自定义的view 2 具体操
  • Qt 5.9.6 下载及安装

    1 下载并安装 Qt 5 9 6 官网下载地址 http download qt io archive qt 5 9 5 9 6 qt opensource windows x86 5 9 6 exe 下载后安装 安装路径不能有中文字符及空
  • node读取文件转换json文件

    323 text h323 3gp video 3gpp aab application x authoware bin aam application x authoware map aas application x authoware
  • 记一次在OrangePiZero2(香橙派zero 2)上部署Redroid(云手机)的过程

    一句废话 这次换一种写作风格 尝试一下轻松的行文方式 起因 很久以前看见有群友讨论关于docker部署Redroid 拿来挂机玩游戏一类的 当时听了感觉很有意思 后面粗浅地在zero2上部署了一下 容器虽然是跑起来了 但是scrcpy连接总
  • istio流量管理

    istio 官方示例 bookinfo 配置sidecar注入 istioctl kube inject debug f samples bookinfo kube bookinfo yaml gt bookinfo2 yaml 使用kub
  • 浅谈QNX进程间通信(IPC)

    锋影 e mail 174176320 qq com 在QNX Neutrino中消息传递 Message passing 是IPC的主要形式 其他的姓氏也是基于消息传递实现的 QNX中提供的IPC形式如何下图所示 一 Synchronou
  • 基础13:惰函数

    有两种实现惰性载入的方式 第一种事函数在第一次调用时 对函数本身进行二次处理 该函数会被覆盖为符合分支条件的函数 这样对原函数的调用就不用再经过执行的分支了 我们可以用下面的方式使用惰性载入重写addEvent function addEv
  • python语言是一种面向过程的语言_浅谈编程语言中的面向过程和面向对象

    最近一直在自学Python 在 Python学习手册 的开篇有一句话 Python可以定义为面向对象的脚本语言 这句话让我十分困惑 并且在之后的一周里面让我总是混淆一些概念 到底什么是 面向对象 到底什么是 对象 带着这个疑问 我继续向下学