“Life is short,I need Python. ”
一开始并没有想学python,直到我在做大量的字符处理的时候,python的切片让我眼前一新,感觉处理的非常简单,于是便去了解了一下Python,从发展历史到语言特点。
起源
1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。Python来自Guido所挚爱的电视剧Monty Python's Flying Circus (BBC1960-1970年代播放的室内情景幽默剧,以当时的英国生活为素材)。他希望这个新的叫做Python的语言,能实现他的理念(一种C和shell之间,功能全面,易学易用,可拓展的语言)。Guido作为一个语言设计爱好者,已经有过设计语言的(不很成功)的尝试。这一次,也不过是一次纯粹的hacking行为。
数据类型(字符串、布尔类型、整数、浮点数、数字、列表、元组、字典和日期)
字符串:不可变对象,可使用单引号,双引号扩起来表示单行字符串,使用三引号表示多行字符串,在三引号可以自由的使用单引号和双引号。
字符串比较特殊的是编码问题 我们知道,计算机是美国人发明的,最初只有127个字母被编码到计算机中,包括大小写字母、数字和一些符号,这个编码表被称为ASCII码表。但要处理一个中文显然一个字节是不够用的,又不能和ASCII码冲突,因此中国制定了GB2312编码。而全世界有很多的语言,在多语言混合的文本中,显示出来的话一定会有乱码,因此,Unicode应运而生。ASCII码用一个字节表示了一个字符,而Unicode用两个字节表示一个字符。以Unicode表示的字符串用u'...'表示。Unicode编码要比ASCII编码多一倍的存储空间,在存储和传输上会十分的不划算,如果写的文本全是英文的话,使用Unicode编码就十分浪费。于是UTF-8编码出现了,UTF-8编码是把一个Unicode字符根据不同的数字大小编码成1-6个字节,并且可以将ASCII码看成是UTF-8的一部分。
List:list是一个是一个可变的有序表,是Python内置的一种数据类型,可以随时添加、删除、替换其中的元素。
Tuple:除了列表以外的另一种有序表称为元组,但是tuple一旦初始化便不能修改,在定义时,tuple的元素就被确定了。因为元组是不可变的,因此修改元素操作是非法的,但是可通过对元素进行连接组合,比如:tuple3 = tuple1 + tuple2。使用del语句可删除整个元组。
Dict:Python内置了字典,使用key-value存储,具有极快的查找速度。和list相比,查找速度要高很多。Dict和List的区别:Dict的查找速度和插入速度都是极快的,不会随着key的增加而增加;但Dict要占用大量的内存,内存浪费多。Dict是不可变对象,因为使用key来计算value的存储位置,为了保证结果的正确性,作为key的对象不能变,可使用字符串、整数等不可变的对象作为dict中的key。
Set:set和dict类似,也是一组key的集合,但是不同的是在set中没有重复的key。
内存管理器
C 或 C++最大的弊病在于内存管理是由开发者负责的。所以程序员也必须在执行了基本任务之外履行对内存管理的职责。这些会让开发者分散精力。Python中,内存管理是由 Python 解释器负责,所以开发人员就可以从内存事务中解放出来,仅仅开发项目。这会使错误更少、程序更健壮、开发周期更短。
解释性和编译性
Python是一种解释型语言,开发过程中没有编译这个环节。通常,不是以本地机器码运行,纯粹的解释型语言通常比编译型语言运行的慢。但类似于 Java,Python实际上是字节编译的,其结果是生成一种近似机器语言的中间形式。这不仅改善了Python的性能,还保持了它解释型语言的优点。
Python运行速度比C语言慢
Python等动态语言每一个操作都需要大量的指令才能完成。动态语言,变量只是对象的引用,比如一个简单的操作:a+b,在C语言中只需要一个机器指令ADD就行,但对于Python而言,变量a和b本身没有数据类型,但它们的值有类型,所以在相加之前需要先判断类型,之后,读取数值,相加,生成一个新对象。
学习Python的体会
开始学习Python的时候觉得比较简单,没有C++那么多复杂的机理去了解,随着逐步的学习发现其实不然,我一定要收回之前自己说的话,每一门编程语言就是设计者花费很多心血设计的,哪有说学会就学会的编程语言。完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。但就是由于变成了20行,程序的可读性变得比较差,难以理解,这正是Python所不关注的问题,只要代码简短就行。随着写代码的时候对一些科学计算的库的使用,开始觉得学习Python吃力了起来,必须弄懂每一行的代码的作用。一个简单的图像处理算法大概用10行的Python代码实现的,我学习这10行的Python代码还要去看数学公式,线性代数,数学真的很重要。。。
总的来说:不同的场合需要使用不同的编程语言呀。每一个都有优势和劣势。我也是刚刚接触这门语言,路漫漫其修远兮,,吾将上下而求索
网友评论