Python语言类型

Python是一门动态解释型的强类型语言。

对这句话进行解析,语言分为动态的和静态的,编译型和解释型的,强类型的和弱类型的语言之分。

下面对三种不同维度的类型的语言进行解释:

1.编译型和解释型

差别:

编译型:一次把所有的代码转换成机器语言,写成可执行文件;

    执行的时候先编译完所有的命令,编译完成后一起执行;

    针对不同的系统之间进行分别编译,编译链接。need( compiler,linker)。

解释型:程序每执行到源程序的某一条指令,则会有一个称之为解释程序的外壳将源代码转换成二进制代码。——So,解释型语言没有办法离开解释程序执行。

    指定的时候,解释一条,执行一条;解释一条,执行一条;

    可移植,跨平台;调试方便。

2.动态语言和静态语言

动态语言:不用给任何变量指定数据类型;

     如VBScript;

静态语言:声明所有变量的数据类型;

      如C/C++,C#,Java

Static typing when possible, dynamic typing when needed.

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

强类型定义语言:是类型安全语言;

        一个变量一旦被指定了某个数据类型,如果不经过强制转化,总是保持指定的数据类型;

弱类型定义语言:一个变量可以赋不同数据类型的值。

转载内容:

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

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

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

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

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

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

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

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

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

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

(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。

时间: 2024-08-02 13:15:15

Python语言类型的相关文章

python语言 buffer类型数据的使用 'ascii' codec can't decode byte 0xe5 问题的解决

在python中我们使用buffer类型时可以将其转换为str类型. 如果obejct的类型为<type 'buffer'> ,可以使用str(object)将其转换为字符串类型. 在转换为字符串类型后如果无法使用+等字符串,则可能是python的str类型的编码方式与buffer的编码格式不一致导致的. 如果buffer使用的是unicode编码,则需要在模块中使用以下代码,将str默认编码改为unicode编码.一般遇到"'ascii' codec can't decode by

python语言的鸭子类型和强类型语言的多态

前面讲接口类的时候举过一个有关支付方式的例子,支付方式可以有几种,微信支付,支付宝支付,苹果支付等,这几个不同的支付都统一于支付,像这样几个类都统一于 某一个类或者某一个方法,或者说一个类有不同的形态的情况就属于多态:虽然几种支付方式都归一于支付类,执行的方法一样,但是每一个支付方式都有自己的特性,实现的 形态也不一样,即为多态性. class Payment: # 必要的父类 def pay(self,money): pass class Wechatpay(Payment): # 子类继承父

使用ctypes实现python类型和C语言类型之间的相互转化

楔子 我们知道可以使用ctypes调用扩展模块,主要是调用扩展模块中使用C编写好的函数,但这些函数肯定都是需要参数的,还有返回值,不然编写扩展模块有啥用呢.那么问题来了,不同的语言变量类型不同,所以python能够直接往C编写的函数中传参吗?显然不行,所以ctypes还提供了大量的类,帮我们将python中的类型转成C语言中的类型. python类型与C语言类型之间的转换 我们说了,python中类型不能直接往C语言的函数中传递(整型是个例外),那么ctypes就提供了很多的类可以帮助我们将py

Python语言学习笔记

获得人生中的成功需要的专注与坚持不懈多过天才与机会.  ——C.W. Wendte Python将很快成为你最喜欢的编程语言! Qt库?  PyQt  Perl-Qt 简单易学,功能强大,高效率的高层数据结构,简单而有效地实现面向对象编程. Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发. 注重的是如何解决问题而不是编程语言的语法和结构. wxPython,Twisted,Boa Constru

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

python语言学习1

Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 龟叔给Python的定位是“优雅”.“明确”.“简单”,所以Python程序看上去总是简单易懂 初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序 python语言是一种很高级的语言 写代码的时候代码量很小,但是所带来的缺点就是运行速度慢 C语言是可以用来编写操作系统的贴近硬件的语言,所以,C语言适合开发那些追求运行速度.充分发挥硬件性

[Python学习笔记1]Python语言基础 数学运算符 字符串 列表

这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档:http://docs.python.org/.在此向文档编辑者致谢.请勿将本文用于商业用途. 一.Python语言介绍 首先,Python是一种广泛应用的通用高级编程语言,具有较高的抽象层次,支持面向对象的编程方法.其具有高级的数据结构和许多方便的库文件,可以完成文件IO.系统调用.网络编程,甚至

关于《selenium2自动测试实战--基于Python语言》

关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至会说,都在扯犊子,看了半天也不知道如何下手. 对于操作手册的书,一般会提供大量的实例,告诉你详细的步骤.对于高手来说,这不就是翻译了一下官方文档嘛,好意思拿来骗钱.但对于新手来说,反而认为是好处,跟着上面的步骤操作就掌握了某种技术能力. 显然,本书属于后者,书中提供了大量代码实例,并没有太多思想层面

Python中类型的概念(一)

本课程主要介绍6种Python语言中的类型:数字类型.字符串类型.元组类型.列表类型文件类型.字典类型 1.数字类型 Python语言包括三种数字类型:整数类型.浮点数类型.复数类型 (1)整数类型 与数学中的整数概念一致,没有取值范围限制 pow(x, y)函数:计算xy. (通过指数函数,可以看出,python语言整数类型没有范围限制) (0x, 0X开头表示16进制数) (0b, 0B开头表示2进制数 ) (0o, 0O开头表示8进制数) (2)浮点数类型 带有小数点及小数的数字 Pyth