编程模式是什么意思?

编程模式是什么意思?,第1张

编程模式是现实事物的一种抽象表示。

那么抽象的最大作用在我看来就在于抽象事物的重用性,一个事物越具体,那么他的可重用性就越低,因此,我们再打造可重用性代码,类,类库时,其实在做的本质工作就在于提高代码的抽象性。而再往大了说开来,程序员做的工作,就是把一系列过程抽象开来,反映成一个通用过程,然后用代码表示出来。

传统的命令式语言比如:FortranC和Pascal都是面向过程的,它们主要的程序设计单元是过程。它们采用一种自顶向下的编程风格。现代的命令式语言比如:C++Java和C#则是面向对象的,它们将对象作为程序的基本单元,将程序和数据封装其中,通过对象的之间的协作来解决问题。面向过程和面向对象是命令式语言主要的两种风格。

命令式编程语言泛指所有把修改变量的值当作最基本计算方式的语言,函数式编程语言指把一个程序的输出定义为其输入的数学函数的语言,纯函数式编程没有内部状态的概念,也没有副作用。

函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。

特性:并发&变量的不变性

在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数。

在函数式编程中,函数是基本单位,是第一型,他几乎被用作一切,包括最简单的计算,甚至连变量都被计算所取代。在函数式编程中,变量只是一个名称,而不是一个存储单元,这是函数式编程与传统的命令式编程最典型的不同之处。

一切问题,归根结底到最后都是数学问题。编程从来都不是难事儿,无非是细心,加上一些函数类库的熟悉程度,加上经验的堆积,而真正困难的,是如何把一个实际问题,转换成一个数学模型。

在函数式编程中,我们则是在将函数方法抽象,函数一样是可重用,可置换的抽象单位。那么我们说函数式编程的抽象本质则是将函数也作为一个抽象单位,而反映成代码形式,则是高阶函数。

递归与循环在编程模型和思维模型上最大的区别则在于:

循环是在描述我们该如何地去解决问题。

递归是在描述这个问题的定义。

一·编程语言及其主要用途

常见的是CFamily(C系列语言),比如:C、Cpp(C)、CSharp(C#)、Java、Python、R、JavaScript、Objective-C、Swift、Go、Kotlin等等。然后有很多脚本语言,Python也在其内,比如:Ruby、Perl等。

光说名字意义不大,所以举几个例子。

C常用于单片机开发和一些接底层硬件的 *** 作使用;

C是C的超集,因为直接支持了面向对象所以更多用于游戏、图像开发方面;

C#是微软为了把Java人才引入Windows平台设计的语言,和Java语法几乎一致,目前多用于服务器后端开发和Unity3D的游戏开发,也有人会用这个做很多windows平台下的软件插件甚至常说的软件外挂(外挂其实严格说就是插件,但大陆地区已经有更深层的意义了,所以两者并列举例出来);

Java是目前最流行的服务器后端开发语言和Android开发语言,因为有大量框架和工具包的支持,Java语言的运行速度已经不能阻挡Java成为服务器开发的首选语言。至于是什么服务器后端开发,题主学了JavaEE自然便知,通俗举例来说可以yy一下:我写了这篇答案,答案存在哪里呢?肯定是在知乎那边!至于怎么存、怎么取,都是后端开发需要设计的问题了。Java也曾一度是Android的首选语言(虽然目前Kotlin的影响很多人转战Kotlin去了),负责Android顶层的APP层开发。

Python是目前机器学习最流行的语言,也可以做服务器开发,有堪比JavaSpring框架的Django作为支持。更多的人会使用Python作为机器学习、深度学习的首选语言,因为Python语法的简洁和类似数学式表达的规范,当然还是因为包多,很多学者科学家都会使用Python做科学研究。

R语言作用类似Python,常用于工程方面。还有一门语言是Matlab,其实称之为语言是不恰当的,因为这是一个软件,脱离了软件就无法生存,远不是编译器那么简单的结构了。MatLab汇集了太多的工具,便于科学从业人员快速分析数据,写出优良的程序,这种程序语言通常也称之为Matlab;

JavaScript是前端开发首选语言,在使用HTMLCSS模式绘制出页面图像后,通常都会使用JS(JavaScript)来写交互、动画、请求、视图内容更新这些 *** 作,这门语言是函数式也是面向对象的语言,灵活度极高,但有了CFamily任何一门语言的基础就很容易学;

Objective-C是苹果(AppleInc)开发的一门为mac和iPhone设备开发程序的语言,和C类似,也是C的超集,也是面向对象。但由于其太过于面向对象了(基于消息的传递数据机制)导致很不CFamily,所以对C系列人员上手难度偏大,比较冷门。但后来iPhone的崛起,导致该语言又一度热议起来;

Swift是苹果最新发明的一门函数式编程语言,和OC(Objective-C)的目的一样,为苹果设备而生,但苹果也提倡用该语言做工程方面的扩展,比如苹果会在宣传的时候拿它和Python对比。为了兼容OC的所有工具包,避免该语言的冷门,创造了bridge作为两个语言直接的桥梁,解决了语言兼容问题;

Go语言是Google开发的一门函数式语言,特点是能解决大规模的高并发问题,天然支持多线程使得该语言一出来就广受关注。目前多用于机器学习和一些Google自己产品的开发以及后端服务器开发;

Kotlin是大家常用的IDEA开发工具的开发商Jetbrains发明的函数式语言,这门语言是基于JVM进行设计的,比较完美地兼容了Java语言,所以前后端开发都可以使用该语言替代Java,不确切统计是可以用比Java少一半的代码量完成同样的功能并拥有同样的运行效率。类似的JVM语言也有Scale,但比较元老了,兼容力度不大所以也开始广受诟病;

Ruby和Perl这些是典型的脚本语言,Ruby多用于各个语言的粘合剂,Perl是Linux下最常用的脚本语言,文本处理能力极强。

关于编程,有三种方式

1、面向对象编程---->类 关键字:class

2、面向过程编程---->过程 关键字:def

3、函数式编程------>函数 关键字:def

函数式编程:函数是逻辑化结构化和过程化的一种编程方式,如

def test(x):

"xxxxx"

x+=1

return x

def:定义函数的关键字

test:函数名称

(x):传入函数的参数

x+=1:泛指逻辑处理块代码

"xxxx"函数描述(非必要,但强列建议添加)

定义一个过程,过程无返回值

def fun1():

"fun1"

print('fun1')

定义一个函数,函数有返回值

def fun2():

"fun2"

print('fun2')

return 0

函数和过程的调用是一致的:

fun1

fun2

在python中,过程就是一个没有返回值的函数,过程默认返因一个none,当函数有多个返回值时,将返回元组,这些值将被当做一个元组的元素,即:

返回值个数0:返回NONE

返回值个数1:返回object

返回值个数多个:返回元组

函数的功能:没有函数的编程只是在写逻辑(功能),脱离函数,重用逻辑(实现功能),唯一的方式就是复制粘贴,使用函数后简化代码,可读性变高,易扩展(保持一致性)

在定义函数时的参数,我们称为行参,如下面的x,y

而调用函数时传入的参数,我们称之为实参,如下面的1、2。

def test(x,y)

print(x)

print(y)

test(1,2)

位置调用时行参与实参的位置关系是一一对应的

def test(x,y)

print(x)

print(y)

test(1,2)

关键字调用时,与实参的位置无关如

def test(x,y)

print(x)

print(y)

test(y=2,x=3)

当位置调用与关键字调用混用时,按照位置调用方式执行,但要记位一句话,关键字参数不能写在位置参数前面,即test(3,y=2,6)此种方式将会报错,应写成test(3,2,z=6)或test(3,z=2,y=6)

当函数中有默认的参数值时如

def test(x,y=1)

return 0

当调用这个函数时,如果不传入y的值时,y的值将采用默认值,如果传入新的y的值时,默认y的值将被覆盖。

默认值使用的场合:

1、软件安装的时候

2、连接数据库的端口

参数组:当行参或实参数量不固定的时候时使用,可与默认参数或行参混用,参数组一定要最至最后

def test(args)#接收N个位置参数 #def test(name,args) #def test(name,age=1,args)

print(args)

test(1,2,3,4,5……)

test([1,2,3,4……])

最终实参会被变成一个元组如:

def fun(agr1,agr2,args)

pass

fun(1,2,3,4,5)

====结果=====

1,2,(3,4,5)

这种方式是预留以后当需要传多个参数时使用而不变动太多的代码

传入不定数量字典时:把N个关键字参数转换成字典的方式,可与默认参数或行参混用,参数组一定要最至最后

def test(agrs1,agrs2,kwargs) #接收N个关键字参数

# print(kwagrs)

# print(kwagrs['name'])

# print(kwagrs['age'])

pass

test(3,5,name='a',age=23,sex='F')#以关键字的方式传值

=====结果====

3,5,{'name':'a','age':23,'sex':'f'}

test({name:'a',age:8,sex:'F'})

###位置参数不能写在关键字参数后面,否则程序会报错

函数调用函数

def test1()

print

def test2()

print

test1() #调用test1

print(test2()) #调用

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11680299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存