面向过程、面向函数、面向对象的区别浅谈

Python的面向过程、面向函数、面向对象的区别浅谈

转自--猎奇古今,加上其他

有人之前私信问我,python编程有面向过程、面向函数、面向对象三种,那么他们区别在哪呢?

面向过程就是将编程当成是做一件事,要按步骤完成!

比如煮咖啡这件事,先拿一定量的咖啡豆,然后磨成粉末,再倒入咖啡机,等待几分钟,就煮好了咖啡。大概过程是这样的
1312654-20181122101527734-1627344573.png

整个过程是按步骤一步一步执行,最终达到目标!

面向函数呢,就是将编程分成N件事情,分配每件事情为一个函数,然后要按步骤执行函数完成!
1312654-20181122101652811-1648893623.png

同样是上面的例子,我们可以这样实现

分解整个任务,执行每个单独小任务,该哪个任务执行,就通知对方即可,执行的过程呢,已经提前封装在函数内了!

面向对象就不一样了,将整个任务封装成一个大的类,在这个类里面详细分解执行每个步骤,只需要执行类就可以完成任务

还以上面例子来说,面向对象就是我不再自己煮咖啡了,而且先设计一个机器人,告诉它煮咖啡的每个步骤(这里注意,你可以使用别人机器人提前设定好的程序哦),然后放在一边,当我想煮咖啡的时候,只需要给机器人一个指令,就自动煮好一杯咖啡了!在代码中是这样的

只需要告诉机器人,去煮咖啡,一会机器人会自动将咖啡煮好并报告结果!
1312654-20181122101744174-1550604471.png

总结

面向过程:需要你自己去一步一步的执行

面向函数:也是需要自己去一步一步执行,只是执行的过程已经提前设定好了

面向对象:让机器人去执行 ,因为已经设定好执行步骤,你只需等待结果就好了

因此,在我看来,面向过程和对象,是自己在干活,面向对象,是先创造机器人,然后让机器人去干活。

站在计算机程序角度来讲,面向过程(函数)和面向对象的本质理解为:

面向过程(函数)的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

总的来说:面向对象是将事物高度抽象化,面向对象必须先建立抽象模型,之后直接使用模型就行了;面向过程是一种自顶向下的编程!

1312654-20181122101913306-113273975.png

1312654-20181122101951199-157070562.png

本人认识:

第一,研究考察的基本单元(粒度)及其特性,命令,函数,还是对象?第二,如何使用这些粒度单元,让他们相互作用,谁先谁后的调度;第三,要看实际业务与哪个粒度比较接近,不要硬套,否则就如拿着java搞汇编一样,谁蛋疼谁知道。还有其他范式,如声明式,响应式。

进一步:
命令范式(脚本过程),就是将各种单词组成一段话。
函数式,你拿了一个插排,开启开关(输入参数:电压220伏特),打开电饭锅(输入参数:15min等),盛入饭碗;每个步骤都用函数传入参数完成,这个结构较松散,插排不一定要跟电饭锅有个特别的关系。你说要搞个什么专门做饭系统之类,就像oop了,插排就专有了,它与电饭锅关系就紧密了,都属于做饭系统内部成员。
面向对象(合适的对象具有较好内聚性),给你一台机器(对象)让它干活,你需要打开电源,按下制作命名,然后按下结束。
声明式,如sql, 把要干的活用个句子描述好了就行了。
响应式比oop更随性了,直接发一个短信(如帮我把这事弄一下。。)过去对方就帮你干活了,其他的你根本不用管。

这些基本研究考察单元的特性决定了: 当基本单元构建完成之后如何重用(所谓重用就是在不同地方多次使用)这些代码,如果你有对象你就直接使用对象类;如果你的基本单元是函数,那么你重用的只是函数,否则不能重用就要在不同地方重写了!若,你的基本单元是命令,那么别处的你似乎只能复制代码了,纳尼?若你需要的是各种服务类似的,比如点外卖,你只要,再点击一下,我要了。。。

正是这些状况,各种编程方式就有不同的性质表现和结构组成,正所谓动机决定表现,总体运行机理决定样本一样。各自范式酌情恰当使用才是最牛,硬拗勉强未必好过。。

也有更多的空间划分隔离和状态保持

转载于:https://www.cnblogs.com/wdmx/p/9999420.html

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

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

相关文章

[pytorch、学习] - 3.5 图像分类数据集

参考 3.5. 图像分类数据集 在介绍shftmax回归的实现前我们先引入一个多类图像分类数据集 本章开始使用pytorch实现啦~ 本节我们将使用torchvision包,它是服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision主要由以下几部分构成: torchvision.datasets: …

[pytorch、学习] - 3.6 softmax回归的从零开始实现

参考 3.6 softmax回归的从零开始实现 import torch import torchvision import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.6.1. 获取和读取数据 batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_si…

[pytorch、学习] - 3.7 softmax回归的简洁实现

参考 3.7. softmax回归的简洁实现 使用pytorch实现softmax import torch from torch import nn from torch.nn import init import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.7.1. 获取和读取数据 batch_size 256 train_iter…

[pytorch、学习] - 3.9 多重感知机的从零开始实现

参考 3.9 多重感知机的从零开始实现 import torch import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.9.1. 获取和读取数据 batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size)3.9.2. 定义模型参…

C语言逗号运算符和逗号表达式基础总结

逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 语法:表达式1,表达式2,...,表达…

[pytorch、学习] - 3.10 多重感知机的简洁实现

参考 3.10. 多重感知机的简洁实现 import torch from torch import nn from torch.nn import init import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.10.1. 定义模型 num_inputs, num_outputs, num_hiddens 784, 10, 256 # 参…

如何从 Android 手机免费恢复已删除的通话记录/历史记录?

有一个有合作意向的人给我打电话,但我没有接听。更糟糕的是,我错误地将其删除,认为这是一个骚扰电话。那么有没有办法从 Android 手机恢复已删除的通话记录呢?” 塞缪尔问道。如何在 Android 上恢复已删除的通话记录?如…

[pytorch、学习] - 3.11 模型选择、欠拟合和过拟合

参考 3.11 模型选择、欠拟合和过拟合 3.11.1 训练误差和泛化误差 在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现…

[pytorch、学习] - 3.12 权重衰减

参考 3.12 权重衰减 本节介绍应对过拟合的常用方法 3.12.1 方法 正则化通过为模型损失函数添加惩罚项使学出的模型参数更小,是应对过拟合的常用手段。 3.12.2 高维线性回归实验 import torch import torch.nn as nn import numpy as np import sys sys.path.append("…

Scapy之ARP询问

引言 校园网中,有同学遭受永恒之蓝攻击,但是被杀毒软件查下,并知道了攻击者的ip也是校园网。所以我想看一下,这个ip是PC,还是路由器。 在ip视角,路由器和pc没什么差别。 实现 首先是构造arp报文&#xff0c…

转:org.apache.maven.archiver.MavenArchiver.getManifest错误

eclipse导入新的maven项目时,pom.xml第一行报错: org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration) 解决办法: 1、Help——>Install …

Codeforces Round #524 Div. 2 翻车记

A&#xff1a;签到。room里有一个用for写的&#xff0c;hack了一发1e8 1&#xff0c;结果用了大概600ms跑过去了。惨绝人寰。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorith…

[pytorch、学习] - 3.13 丢弃法

参考 3.13 丢弃法 过拟合问题的另一种解决办法是丢弃法。当对隐藏层使用丢弃法时,隐藏单元有一定概率被丢弃。 3.12.1 方法 3.13.2 从零开始实现 import torch import torch.nn as nn import numpy as np import sys sys.path.append("..") import d2lzh_pytorc…

[pytorch、学习] - 4.1 模型构造

参考 4.1 模型构造 让我们回顾以下多重感知机的简洁实现中包含单隐藏层的多重感知机的实现方法。我们首先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出大小为256,即隐藏层单元个数是256;第二层的输出大小为10,即输出层单元个数是10. 4.1.1 继承Module类来…

springboot---基本模块详解

概述 1.基于Spring框架的“约定优先于配置&#xff08;COC&#xff09;”理念以及最佳实践之路。 2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块&#xff0c;且“开箱即用”&#xff08;约定spring-boot-starter- 作为命名前缀&#xff0c;都位于org.…

[pytorch、学习] - 4.2 模型参数的访问、初始化和共享

参考 4.2 模型参数的访问、初始化和共享 在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享同一份模型参数。 import torch from torch import nn…

IEnumerableT和IQueryableT区分

哎&#xff0c;看了那么多&#xff0c;这个知识点还是得开一个文章 IQueryable和IEnumerable都是延时执行(Deferred Execution)的&#xff0c;而IList是即时执行(Eager Execution) IQueryable和IEnumerable在每次执行时都必须连接数据库读取&#xff0c;而IList读取一次后&…

表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点

异同点 都可以对表行转列&#xff1b;DECODE功能上和简单Case函数比较类似&#xff0c;不能像Case搜索函数一样&#xff0c;进行更复杂的判断在Case函数中&#xff0c;可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等&#xff08;也可以使用NOT IN和NOT EXISTS&#xff0c;但是…

[pytorch、学习] - 4.4 自定义层

参考 4.4 自定义层 深度学习的一个魅力在于神经网络中各式各样的层,例如全连接层和后面章节将要用介绍的卷积层、池化层与循环层。虽然PyTorch提供了大量常用的层,但有时候我们依然希望自定义层。本节将介绍如何使用Module来自定义层,从而可以被重复调用。 4.4.1 不含模型参…

spring-boot注解详解(四)

repository repository跟Service,Compent,Controller这4种注解是没什么本质区别,都是声明作用,取不同的名字只是为了更好区分各自的功能.下图更多的作用是mapper注册到类似于以前mybatis.xml中的mappers里. 也是因为接口没办法在spring.xml中用bean的方式来配置实现类吧(接口…