漫谈Python(0)

作者: 斐波那契的数字 | 来源:发表于2017-07-05 01:20 被阅读152次

    0. 前言

    2015年,9月. 李狗剩大学毕业,顺利地考入了当地的一所大学.正式的成为了一名研究生. 他满怀着硕士生涯的憧憬拨打了导师的电话:

    一番寒暄之后,二人开始切入正题....

    "小李啊,9月份就可以正式入学了, 读研期间你得有自己的目标啊. 要严格的要求自己.这个暑假啊,最好是把Python自己先看一遍, 最好提前来实验室. 有什么事情我们QQ联系,祝你好运."

    ....

    接完电话, 小李一脸茫然: Python 是什么鬼啊? 这东西能干什么?

    1. 什么Python

    狗剩刚开始接触Python,首先想到的是上往查资料. 结果看完网上的博客和教程之后更加茫然了. 有人说 python 是脚本语言; 有人说Python 是面向对象的高级语言;还有人说python是"胶水",可以粘合着各种其他的语言; 这些人说的都很有道理, 那么到底谁说的对呢? 小李开始又开始迷茫了... 于是,开始求助坐在旁边的师兄--志强.

    "小李, 这些说法啊", 志强深深的吸了一口气,故作姿态的说:" 都对 . 每个人都有自己对事物的看法,不同的人在不同的阶段对同一件事情会有不同的看法,这看起来有点像哲学的历史唯物主义,但道理同样适用于对计算机语言学习. 可能现在你不理解,但是接触一定的时间以后你会发现他们说的都是对的,那么Python 比较官方的解释是什么呢? 来让我们看看python 官方文档[2]的解释 ..."

    Python is an interpreted, interactive, object-oriented

    programming language. It incorporates modules, exceptions,

    dynamic typing, very high level dynamic data types, and

    classes. Python combines remarkable power with very clear

    syntax. It has interfaces to many system calls and libraries,

    as well as to various window systems, and is extensible in C

    or C++. It is also usable as an extension language for

    applications that need a programmable interface. Finally,

    Python is portable: it runs on many Unix variants, on the

    Mac, and on PCs under MS-DOS, Windows, Windows NT, and OS/2.

    大致就是说:

    Python是一种解释型,交互式的面向对象编程语言。

    它包含模块,异常,动态类型,高级动态数据类型和类。

    Python结合了卓越的功能和非常清晰的语法。

    它具有许多系统调用和库以及各种窗口系统的接口,并且可以在C或C ++中扩展。 它也可用作需要可编程接口的应用程序的扩展语言。

    最后,Python是可移植的:它运行在许多Unix变体,Mac上,以及MS-DOS,Windows,Windows NT和OS / 2下的PC上。

    小李看完了Python 的权威解释, 瞬间明白了:" 原来,python和男人一样,不只有一面."

    志强: "老弟, 你这样给七匹狼打广告合适么? "

    Python是一门优雅而且健壮的语言,它继承了传统编译语言的强大性和通用型;同时它还借鉴了简单脚本和解释语言的易用性.

    1.1 对Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言. 的理解

    解释性和编译性

    Python 是一种解释性语言,这意味着开发过程中没有了编译环节. 一般来说,由于不是本地机器码运行,纯碎的解释性语言要比编译型语言运行的慢. Python实际上是字节编译的(类似的还有java) , 其结果就是可以生成一种近似于机器语言的中间形式. 这种方式比仅仅可以提高Python 性能,同时还保持了解释性语言的优点.

    PS: Python 的源文件常常是*.py , 当源文件被解释器加载或者显示的进行字节码编译的时候会编译成字节码文件,字节码问价通常是*.pyc 或者是*.pyo这样的扩展名(类似于java 的 *.class 文件); 关于扩展名知识, 在随后会涉及到,这里先大致了解一下;

    那么根据Python 的这个特点,我们也可以知道: Python 可以像Java一样可具有移植性;

    面向对象

    python 绝对不像java一样仅仅是一门面向对象的语言;实际上它借鉴了很多编程思想, 还借鉴了Lisp和Haskell 这些函数式语言的特性; 在编程风格中,初次使用它的程序员可能会感觉像javaScript

    互动性(交互性)

    Python 是不仅仅可以使用python 命令与运行/编译文件, 同时也可以用python 命令进入交互页面; 想要退出交互模式,输入exit()即可

    脚本语言

    Python 可以像shell 脚本语言一样的编写程序.不需要main方法入口.

    1.2 Python 印象

    "呼~",小李听完了志强介绍, 长舒一口气,"原来Python有这么多的身份"

    "是啊", 志强点点头,对自己的师弟说:"看来你对Python已经有一定了解了, 只需要多家动手练习,假以时日一定会成为一个Python高手的. "

    "恩恩 ~", 小李回答道.

    "这样,我在给你讲讲Python的起源吧, 以后出去了可以和别人吹吹牛逼" 志强看见小李听得兴奋,干脆在给他讲一点背景知识.....

    Python 起源

    Guido Van Rossum 在1989年底创建了Python ,那个时候他孩子荷兰的CWI(国家数学和计算科学研究院). 1991年初的时候,他发布了第一个Python 的公开发行版. Python 的起源似乎和C++/C/Java 一样, 都是来自于某一个研究项目. 于是和其他的故事的开头一样: 项目中的那些程序员利用手边现有的工具在工作的时候发现很棘手,于是他们设想并开发出了更好的解决方案.

    那个时候van Rossum 是一位研究员对解释性语言ABC有着丰富的设计经验呢. 但是这个人不满足于ABC有限的开发能力, 他算得上是一位数学家, 他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿。

    在那个时候,他接触并使用过诸如Pascal、C、 Fortran等语言。这些语言的基本设计原则是让机器能更快运行。在80年代,虽然IBM和苹果已经掀起了个人电脑浪潮,但这些个人电脑的配置很低 (在今天看来)。比如早期的Macintosh,只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存。所有的编译器的核心是做优化,以便让程序能够运行。为了增进效率,语言也迫使程序员像计算机一样思考,以便能写出更符合机器口味的程序。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。有人甚至认为C语言的指针是在浪费内存。至于动态类型,内存自动管理,面向对象…… 别想了,那会让你的电脑陷入瘫痪。

    Guido von Rossum

    然而,这种思考方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间 (即使他已经准确的知道了如何实现)。他的另一个选择是shell。Bourne Shell作为UNIX系统的解释器(interpreter)已经长期存在。UNIX的管理员们常常用shell去写一些简单的脚本,以进行一些系统维护的工作,比如定期备份、文件系统管理等等。shell可以像胶水一样,将UNIX下的许多功能连接在一起。许多C语言下上百行的程序,在shell下只用几行就可以完成。然而,shell的本质是调用命令。它并不是一个真正的语言。比如说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。

    (关于shell,你可以参考Linux架构和Linux命令行与命令)

    Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。ABC语言让Guido看到希望。ABC是由荷兰的CWI (Centrum Wiskunde & Informatica, 数学和计算机研究所)开发的。Guido在CWI工作,并参与到ABC语言的开发。ABC语言以教学为目的。与当时的大部分语言不同,ABC语言的目标是“让用户感觉更好”。ABC语言希望让语言变得容易阅读,容易使用,容易记忆,容易学习,并以此来激发人们学习编程的兴趣。

    管已经具备了良好的可读性和易用性,ABC语言最终没有流行起来。在当时,ABC语言编译器需要比较高配置的电脑才能运行。而这些电脑的使用者通常精通计算机,他们更多考虑程序的效率,而非它的学习难度。除了硬件上的困难外,ABC语言的设计也存在一些致命的问题:

    可拓展性差。ABC语言不是模块化语言。如果想在ABC语言中增加功能,比如对图形化的支持,就必须改动很多地方。 不能直接进行IO。ABC语言不能直接操作文件系统。尽管你可以通过诸如文本流的方式导入数据,但ABC无法直接读写文件。输入输出的困难对于计算机语言来说是致命的。你能想像一个打不开车门的跑车么? 过度革新。ABC用自然语言的方式来表达程序的意义,比如上面程序中的HOW TO (如何)。然而对于程序员来说,他们更习惯用function或者define来定义一个函数。同样,程序员也习惯了用等号(=)来分配变量。这尽管让ABC语言显得特别,但实际上增加了程序员的学习难度 (程序员大都掌握不止一种语言)。 传播困难。ABC编译器很大,必须被保存在磁带(tape)上。当时Guido在访问的时候,就必须有一个大磁带来给别人安装ABC编译器。 这样,ABC语言就很难快速传播。"

    "等等, 所以这就是Python 产生原因吧", 小李迫不及待的开始说到.

    "你可以这样理解,其实当时的ABC 的缺陷是一个客观原因, 主观的原因还是Guido 本人对事情的执着于最求完美的态度",志强拿起旁边的水杯喝了一口. "你先别急,我在给你继续讲一下,

    Python语法很多来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。但这些语法规定让Python容易读。另一方面,Python聪明的选择服从一些惯例(特别是C语言的惯例)。比如使用等号赋值,使用def来定义函数。Guido认为,如果“常识”上确立的东西,没有必要过度纠结。

    Python从一开始就特别在意可拓展性(extensibility)。Python可以在多个层次上拓展。从高层上,你可以引入.py文件。在底层,你可以引用C语言的库。Python程序员可以快速的使用Python写.py文件作为拓展模块。但当性能是考虑的重要因素时,Python程序员可以深入底层,写C程序,编译为.so文件引入到Python中使用。Python就好像是使用钢构建房一样,先规定好大的框架。而程序员可以在此框架下相当自由的拓展或更改。

    最初的Python完全由Guido本人开发。Python得到Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。Guido和一些同事构成Python的核心团队。他们将自己大部分的业余时间用于hack Python (也包括工作时间,因为他们将Python用于工作)。随后,Python拓展到CWI之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节 (Guido有一件T恤,写着:人生苦短,我用Python)。这一特征吸引了广大的程序员。Python开始流行。 "

    "啊, 很棒,这个人愧是大牛", 李狗剩听了志强的介绍逼近开始新潮澎湃.

    志强说道: "那就好好学Python, 把 Python 掌握熟练吧. 时间不早了,该去吃饭了. 明天在给你讲一下Python的内存管理器; 然后在你电脑里面安装Python 吧"

    "哈哈, 学长. 我用的是linux 系列的操作系统.自带Python ",李狗剩得意的说道

    "那也要学会安装,以后要是想升级Python 版本或者是写在Python 怎么办? 做事情啊,还是要用心.把windows/macOS和Ubuntu下的安装一遍, 再写一个安装手册发给老师吧", 志强听了小李的话,急忙的开导他,"做事情啊,还是要认真的. 尤其是咱们理工科专业, 强调动手实践. 别偷懒啊 "

    参考资料:

    why python

    [2] General Information

    [3]Python起源

    [4] Guido

    相关文章

      网友评论

        本文标题:漫谈Python(0)

        本文链接:https://www.haomeiwen.com/subject/aqsfhxtx.html