Python之编程基础(编程语言分类)

一、编程语言简介

编程语言主要从以下几个角度进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言。

1.编译型跟解释型

编译型,其实他和汇编语言是一样的,也是有一个负责翻译的程序来对问我们的源码进行转换,生成相对应的可执行代码。这个过程说的专业点儿就称为编译(Compile),而负责编译的程序自然称为编译器(Compile)。如果我们写的程序代码包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了。但对于一个比较发杂的项目,为了方便管理,我们通常吧代码分散在各个源文件中,作为不同模块来组织。这是编译各个文件时就会生成目标文件(Object file)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的一部分,所以我们不能直接运行。待所有的源文件编译都大功告成,我们就可以最后把这些半成品的目标文件打包成一个可执行文件了,这个工作由另一个程序员负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫做链接程序(Linker)。链接程序除了链接目标文件外,可能还有各种资源,像图标文件啊、声音文件啊什么的,还要负责去除目标文件之间的冗余重复代码,等等。链接完成之后,一般就可以得到我们想要的可执行文件了。

解释型,从字面上看,“编译”和“解释”的确都有“翻译”的意思,它们的区别在于翻译的时机安排不大一样。打个比方:假如你打算阅读一本外文书,而你不知道这门外语,那么你可以找一名翻译,给他足够的时间让他从头到尾的吧这本书翻译好,然后把书的母语版交给你阅读;或者,你也可以让这名翻译辅助你阅读,让他一句一句的给你翻译,如果你想往回看某个章节,他也得重新给你翻译。

两种方式,前者就相当于我们所说的编译型:一次把所有的代码转换成机器语言,然后写成可执行文件;而后者就相当于我们要说的解释型:在程序运行的前一刻,还只有源码程序没有可执行程序;而程序每执行到源码程序的某一条指令,则会有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行,总言之,就是不断的解释、执行、解释、执行……所以,解释型程序是离不开解释程序的。像早期的BASIC就是一门经典的解释型语言,要执行BASIC程序,就得进入BASIC环境,然后才能加载源文件,运行。 解释型程序中,由于程序总是以源码的形式出现,因此只要有相应的解释器,移植几乎不成问题。编译型程序虽然源码也可以移植,但前提是必须得针对不同的系统分别进行编译,对于复杂的工程来说,的确实件不小的时间消耗,况且很可能一些细节的地方还是要修改源代码。而且,解释型程序省却了编译的步骤,修改调试也比较方便,编辑完毕后即可立即运行,不必像编译程序一样每次进行小改动都要耐心等待漫长的Compiling...Linking...这样的编译链接过程。不过凡事都有利有弊,由于解释型程序是将编译的过程放到执行过程中,这就决定了解释型程序注定要比编译型程序慢上一大截,像几百倍的差距也是不足为奇的。

 编译型与解释性的区别:

编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal Pascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚步及辅助开发接口这样的速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、Javascript、VBSscript、Perl、Python等等。

但既然编译型与解释型各有优缺点又相互对立,所以一批新兴的语言都有吧两种语言折中起来的趋势,例如Java语言虽然比较接近解释型语言的特性,但在执行之前已经预先进行一次预编译,生成的代码是介于是机器码和Java源代码之间的中介代码,运行的时候则由JVM(Java的虚拟机平台,可视为解释器)解释执行。它即保留了源代码的高抽象、可移植的特点,又已经完成了对源码的大部分编译工作,所以执行起来比“纯解释型”程序要快很多。而像VB6(或者以前版本)、C#这样的语言,虽然表面上看生成的是.exe可执行程序文件,但VB6编译之后实际生成的也是一种中介码,只不过编译器在前面安插了一段自动调用某个外部解释器的代码(改解释程序独立与用户编写的程序,存放于系统的某个DLL文件中,所有以VB6编译生成的可执行程序都要用它),已解释执行实际的程序体。C#(以及其他.net的语言编译器)则是生成.net目标代码,实际执行时则由.net解释系统(就像JVM一样,也是一个虚拟机平台)进行执行。当然.net目标代码已经相当“低级”,比较接近机器语言了,所以仍将其视为编译语言,而且其可移植度也没有Java号称的这么强大,Java号称是“一次编译,到处执行”,而.net则是“一次编码,到处编译”。总之,随着设计技术与硬件的不断发展,编译型与解释型两种方式的界眼正在不断变得模糊。

2.动态语言与静态语言

通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。

(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript多少属于动态类型的语言。

(2)静态类型语言:静态类型语言与动态类型语言正好相反,它的数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

3.强类型定义语言和弱类型定义语言

(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

(2)弱类型定义语言:数据类型可以被忽略的语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!

例如:Python是动态语言,是强类型定义语言(类型安全的语言);VBScript是动态语言,是弱类型定义语言(类型不安全的语言);JAVA是静态语言,是强类型定义语言(类型安全的语言)。

通过上面的介绍,我们可以得出,python是一门动态解释性的强类型定义语言。

时间: 2024-09-29 05:06:56

Python之编程基础(编程语言分类)的相关文章

Python核心编程基础教程之Python运算符、运算符优先级、表达式简介--20150717

Python核心编程基础教程之Python运算符.运算符优先级.表达式简介 1.Python运算符与表达式: (1)认识Pyhton运算符1:什么是运算符 在Python运算中,有时候我们需要对一个或者多个数字或者一个或者多个字符串进行运算操作,*,+ (2)认识Pyhton运算符2:运算符有哪些以及运算符的使用方法 + :加 - :减 * :乘 / :除 ** :幂 < :小于 > :大于 != :不等于 // :求相除的整数部分 % :求相除的余数部分 & :按位与 | :按位或

python网络编程基础(线程与进程、并行与并发、同步与异步)

python网络编程基础(线程与进程.并行与并发.同步与异步) 目录 线程与进程 并行与并发 同步与异步 线程与进程 进程 前言 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行.注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的

PYTHON网络编程基础 pdf扫描版高清下载

PYTHON网络编程基础 pdf,本书全面介绍了使用PYTHON进行网络编程的基础知识,高级网络操作.WebServices.解析HTML和XHTML.XML.FTP.使用PYTHON操作数据库.SSL.几种服务器端框架,以及多任务处理等,实用性比较强,书中提供了175个实例,6600行以上的代码. 目录 第1部分 底层网络 第1章 客户/服务器网络介绍 第2章 网络客户端 第3章 网络服务器 第4章 域名系统 第5章 域名系统 第2部分 Web Service 第6章 Web客户端访问 第7章

Python黑客编程基础3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下

4.python面向对象编程基础

4.1 面向对象编程的基本思想 类用来定义抽象类型 实例的一个类的具有实现 python中 class Person: pass 数据封装 class Person: def __init__(self, name,age ) self.name = name self.age = age p = Person('xiaoming',23) 4.2类的定义与创建实例 在Python中,类通过 class 关键字定义.以 Person 为例,定义一个Person类如下: class Person(

《Python网络编程基础》笔记

主要是关于<Python网络编程笔记>这本书的笔记...可能有点乱... 总共包含6个部分.. 第一部分 第1章:客户/服务器网络介绍 未完待续.....

Python Socket编程基础篇

Socket网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用打开.读写.关闭模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket和file的区别: file模块是针对某个指定

Python 面向对象编程基础

活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法. 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派. 这样一说是不是更不明白了.所以

《Python网络编程基础》第四章 域名系统

域名系统(DNS) 是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因: 它们可以使人们比较容易地记住名字,如www.baidu.com. 它们允许服务器改变IP地址,但是还用同样的名字. 作为一个例子,让我们看一下查询    www.baidu.com  首先,您的程序会和操作系统配置文件指定的本地名称服务器通信.这个服务器是一个递归的名称服务器,它收到请求并以适当的方式传递下去,它会为您完成大量工作. 递归服务器做的第一件事情是询问.co