Python简介

1.1 Python的历史

1.1.1 Python的诞生

Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它。Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕士学位,因此他可以算是一位数学家,不过他更享受使用计算机解决问题的感觉。Python只是由Guido的一次hacking产生的,1989年圣诞节假期,早就萌发了设计一门好用的高级语言的想法的Guido,放弃了休息,全身心的投入到了设计新语言的活动中去,结果产生了世界上少有的几门最优美、最易用、最简洁的高级程序设计语言之一——Python语言。

我们说过,Guido是一个牛人,他在设计Python语言之前,已经接触并使用过Pascal、C、Fortran等高级语言,这些语言各有强大的功能,能够很好地解决问题,Guido也能很熟练地使用它们,他为什么还要"多此一举"地设计一门新语言呢?

这是因为,上述这些语言都是为了充分利用计算设备而设计的,因为那时的计算机CPU不够快,内存不够大,这些语言设计的主要目标之一是充分利用计算机有限的资源,让程序运行得更快,占用的内存空间更小,虽然也把人类的可读性和易用性作为一个目标,但后者仍不够突出,结果人类不能用最简洁的方式去书写计算机程序,写出来的程序既长又不好懂。举个生活中的例子进行类比: 假设初中生、小学生和幼儿园小朋友都解一道数学题:

鸡兔同笼,共有头48个,脚132只,求鸡和兔各有多少只?

初中生解这道题的方法是:

设有鸡x只,兔y只,则       # 对应到计算机编程,这是编写程序代码的部分
x+y=48                   # 容易理解,容易编写,简明
2x+4y=132
解这个二元一次方程组,得:   # 这是程序运行进行计算的部分
x=30, y=18

小学生解这道题的方法是:

1. 将鸡、兔都剪去2只脚,还剩几只脚: 132-48*2 # 对应到计算机编程,这是编写程序                                                                           
                                         # 代码的部分,不容易理解
2. 上式计算结果是=36                      # 这是程序运行进行计算的部分
3. 剩下的脚是兔子的脚,兔子有几只: 36/2     # 对应到计算机编程,这是编写程序                                                                       
                                         # 代码的部分,不容易理解 
4. 上式计算结果是=18
5. 鸡有多少只: 48-18=30只

幼儿园小朋友解这道数学题时,需要家长手把手地教他们做:

第一步: 48个头中有鸡的头,也有兔子的头
第二步: 132只脚中有鸡的脚,也有兔子的脚
第三步: 每只鸡有2只脚,每只兔子有4只脚
...
很多步之后:
鸡: 30只,兔: 18只

在上面这个例子中,我们可以看到初中生、小学生、幼儿园小朋友之间解同一个数学问题的区别首先是表达方式上的区别,可以把他们类比成Python(初中生)、C/Fortran/Pascal(小学生)、汇编语言(幼儿园小朋友)之间的区别,越是高级的语言,解题方法的表达方式就越简洁、越清晰、越容易理解,所需的解题步骤(代码量)就越少。

Guido创造Python时想解决的是类似的问题,C/Fortran/Pascal甚至汇编语言的能力不可谓不强大,就像一个训练有素的小学生可以解决很多生活中的实际问题一样,但是它们的缺点是需要下达的指令(编写的代码)太多,而且不容易直观地理解。举个例子,常常一行Python代码可以抵得上十几行C语言代码。

先看Python代码

# 代码1.1 printStr.py ,这是Python代码,这段代码和下面的C代码作用相同
s1="Hello,"
s2="World!"
s3=s1+s2       
print(s3)

代码1.1 的输出如下所示

$ python3 printStr.py
$ Hello,World!

说明: 本文中的Python代码假定是在类Unix系统下运行的,$是命令提示符

再来看看C代码

// 代码1.2 printStr.c 这是C代码
#include <malloc>
#include <stdlib>
#include <stdin>
int strlen(char str[])
{
  int len=0;
  char *p=0;
  for(p=str;p!=NULL;p++){
    len++;
  }
  return len;
}
int main(void){
  char s1[]="Hello,";
  char s2[]="World!";
  char * s3=(char *)malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1));
  char *p=0;
  for(p=s1;p!=NULL;p++){
    *s3++=*p;
  }
  for(p=s2;p!=NULL;p++){
    *s3++=*p;
  }
  s3='\0';
  s3=s3-strlen(s3);
  printf("%s\n", s3);
}

代码1.2的输出如下:

$ gcc printStr.c -o printStr
$ ./printStr
$ Hello,World!

代码1.1和代码1.2完成的是相同的功能,在C语言中使用了29行代码实现,而且代码的含义并不直观,反观Python代码,它只用了4行代码,简洁明快,容易理解,而代码量非常少,这就是Guido Von Rossum想要实现的效果。

1.1.2 Python的主要版本

Python历史上经历了0.X、1.X、2.X和3.X等4个大的主要版本,其中的X表示小版本号,比如Python2就有2.0、2.4、2.5、2.6、2.7等版本。Python的主要版本诞生时间如表1.1所示。现在世界上应用的Python程序,使用的主要是Python 2.X和Python 3.X版本,使用这两种Python大版本的应用程序是并存的,但Python 2和Python 3并不兼容,这是由于在开发Python 2时,计算机世界的很多新技术还未出现,Python 3提供了对这些新技术的支持,因此其不与Python 2 兼容。Python 2 将在 2020年停止支持,不再进行开发。今后应该主要学习和使用Python 3。不过,由于Python 2和Python 3的设计理念是相同的,而且大部分内容也相同,因此,从Python2开始学习也可以平滑地转换到Python 3上。

Python版本号 诞生时间
世界上首个Python版本 1989年圣诞节
第一个公开发行的Python版本 1991年
Python 1.0 1994-01
Python 2.0 2000-10-16
Python 2.4 2004-11-30
Python 2.5 2006-09-19
Python 2.6 2008-10-01
Python 2.7 2010-07-03
Python 3.0 2008-12-03
Python 3.1 2009-06-27
Python 3.2 2011-02-20
Python 3.3 2012-09-29
Python 3.4 2014-03-16
Python 3.5 2015-09-13
Python 3.6 2016-12-23

1.2 Python是一种解释型(脚本)语言

编程语言可以分成解释型和编译型两种。实际上,对于高级语言来说,我们编写的代码都是为了更好地完成计算任务及让人们更好的编写和理解代码而设计给人们使用的,因此编写代码这个步骤是面向人类的,也就是人类可读写的。另一方面,还需要让计算机理解和运行程序,而计算机只理解0/1组成的代码,它并不能直接运行人们编写的高级语言代码。如何解决这个问题呢?这就需要高级语言的解释器或编译器大显身手了,这两个东西都是将高级计算机语言翻译成机器可执行的代码的工具。显然,使用解释器的就是解释型语言,使用编译器的就是编译型语言了。二者的区别是解释型语言运行时,形式上是直接运行高级语言代码,解释器在后台逐条对高级语言代码进行解释运行,多次运行需要多次解释;而编译型语言的高级语言代码一旦编写除错完成,就使用编译器对代码进行一次性地编译,翻译成机器可以执行的代码,供以后反复运行,一次编译可以多次运行。编译型语言的一个著名的例子就是C语言。

由于解释型语言运行时,同时要进行解释和运行的任务,而编译型语言的编译过程提前完成了,所以解释型语言通常比编译型语言的程序运行速度慢,而且慢得多。

解释型语言由于直接运行高级语言代码,像电影脚本那样,按照文件预定的步骤,一步一步完成处理任务,所以也称为脚本语言。

Python是一种解释型(脚本)语言。它自从创生以来就风靡了世界,取得了很大的成功。为什么Python运行速度慢,还能做到这样的成功呢? 这就要从它的特点说起了。

1.3 Python的特点

1.3.1 Python代码易读、易写、易懂、易调、易改

Python的设计理念是"优雅、简明、高效",我们在前面所举的例子代码1.1中可以充分地看到上述这一特点。由于Python是一种解释型语言的特点,执行它不需要对其进行编译,代码执行过程中发现了问题,可以直接修改代码进行调试,而Python解释器提供的错误排查机制,增强了调试除错的功能,因此实际使用Python时感觉十分流畅,这种体验非常容易让人上瘾。

1.3.2 Python功能强大、易扩展、有丰富的专业库

另外,一方面Python好像是一个工具箱,官方Python语言及其标准库就自带很多好用的工具,如它的字符串处理能力,如列表、元组、字典等数据结构,如列表解析、函数的可变参数传递和多值返回、如动态数据类型和自动垃圾回收机制等内容。

同时,其他组织和个人还可以为Python开发实现某项通用功能的软件库,通过"第三方"扩展模块的方式为Python提供"扩展的工具箱"。

由于Python本身十分强大,并且存在丰富的软件库,每个想要实现某种特定任务的人,都可以找到合适的软件包进行工作,而且由于软件包常常十分强大,非常适合新手完成用其他语言很难完成的任务,用句俗话说 ,就是非常容易上手。

进一步说,Python用户还可以在Python官方语言和丰富的第三方库的基础上自定义自己的"实用工具",来增加自己可用的工具。因此,可以说Python具有灵活的扩展性,在各个行业领域都具有丰富的软件库可供使用。Python非常适用于具有各种专业背景的人士编写计算机程序完成专业领域的运算任务。

表1.2列出了一些酷炫的Python软件库:

软件库 功能
NLTK 人类语言处理
jieba 中文分词工具
SnowNLP 一个处理中文文本的库
pyocr 光学字符识别(把扫描的文字图像转换成字符串)
moviepy 一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs
GeoDjango 世界级地理图形 web 框架
django-shop 一个基于 Django 的店铺系统
Cartridge 一个基于 Mezzanine 构建的购物车应用
newspaper 使用 Python 进行新闻提取,文章提取以及内容策展
PyCrypto Python 密码学工具箱
Tkinter Tkinter 是 Python GUI 的一个事实标准库
Panda3D 由迪士尼开发的 3D 游戏引擎,并由卡内基梅隆娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装
PyOgre Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用
astropy 一个天文学 Python 库
bccb 生物分析相关代码集合
Neupy 执行和测试各种不同的人工神经网络算法
NumPy 使用 Python 进行科学计算的基础包
ino 操作Arduino的命令行工具
Pyro Python 机器人编程库

1.3.3 Python代码简明,书写效率高

Python语言本身设计得简明而高效,而且由于各种强大的Python软件库的存在,它们已封装了各种强大的功能,引入了这些库之后,实现专业领域的复杂任务常常只需数行甚至一行核心代码就可解决问题,因此,Python代码常常非常简明,而且书写效率相当高,这一点,在前面的代码1-1已经见识到了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容