码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习准备工作

时间:2020-04-26 10:45:31      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:python 1   通过   超出   内存回收   ott   c语言实现   block   由来   bit   

目录导航

Python学习前的准备工作

编程语言历史

  在计算机硬件基础中我们大概介绍了一下计算机的发展历史。在有一段时期里是不存在操作系统这一概念的,所有需要计算机完成的操作都需要当时的程序员来直接与计算机底层硬件直接对话,而我们知道计算机是基于电来进行工作,内部存储的都是二进制。故最早的编程语言即二进制语言,也被称为机器语言。

 

  早期的操作人员是通过带有孔的纸带将程序输入电脑进行编译(对纸条打点),这使得开发人员的开发效率及其低下。而后为了解决这种问题则出现了汇编语言,汇编语言相较于机器语言来说稍微简洁了一些,实际上说白了汇编语言就是将机器语言的二进制用英文标识符做了一次封装,但它也是同底层硬件直接打交道的一种语言。

 

  到了20世纪60年代,贝尔实验室的研究员Ken Thompson(肯·汤姆森)发明了B语言,而后又使用B语言编了个游戏 - Space Travel。他找了一台空闲的机器 PDP-7 想来玩这个游戏,但是这台机器并没有操作系统。所以顺带着 Thompson 又为 PDP-7 开发了一套操作系统,而后来这个操作系统(OS便是操作系统的意思)被命名为 UNIX

 

技术图片

 

 

  1971年的时候 Ken Thompson 的同事 D.M.Ritchie(DM里奇)也想玩 Space Travel,所以和 Ken Thompson合作开发UNIX,并且在1972年的时候改进了B语言并将新语言改名为C语言(取BCPL中的第二个字母,C)。

 

技术图片

 

  到了1973年的时候C语言主体完成。Ken Thompson 和 D.M.Ritchie 已然忘记了 Space Travel 这款游戏。并且全身心投入到了UNIX和C语言的开发,至此,UNIX和C语言相辅相成的一直发展道了今天。

 

  • 类C语言起源与历史

 

      CPL(Combined Programming Language) - 1963
      CPL是1963年剑桥大学发明的


 

      BCPL(Base Combined Programming Language) - 1967
      剑桥的Matin Richards 对CPL做了简化,推出了BCPL


 

      B(B Programming Language) - 1969
      贝尔实验室的Ken Thompson(肯·汤普森) 对BCPL又做了改进,设计出了简单的且接近硬件的B语言,并用B语言写了第一个UNIX OS


 

      C(C Programming Language) - 1972
      贝尔实验室的另外一个人Dennis MacAlistair Ritchie(D.M.Ritchie - DM里奇)在B的基础上设计出了C语言。C 保持了B的优点(精炼、接近硬件),又克服了他的缺点(过于简单,数据无类型)


 

      C++(C plus plus Programming Language) - 1983
      还是贝尔实验室的人,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在C语言的基础上推出了C++,它扩充和完善了C语言,特别是在面向对象编程方面。一定程度上克服了C语言编写大型程序时的不足。


 

      Java(Java Programming Language) - 1995
      Sun公司的Patrick Naughton的工作小组研发了Java语言,主要成员是James Gosling(詹姆斯·高斯林)


 

      C#(C Sharp Programming Language) - 2000
      Microsoft公司的Anders Hejlsberg(安德斯·海尔斯伯格)发明了C#,他也是Delphi语言之父。
  

  • 浏览器和JavaScript的历史

      

    1994年,网景公司(Netscape)发布了Navigator浏览器0.9版,这是世界上第一款比较成熟的网络浏览器,轰动一时。

    但是这是一款名副其实的浏览器–只能浏览页面,浏览器无法与用户互动。比如你登录一个网站输入完用户名点击提交的时候。浏览器并不知道你是否输入了,也无法判断。只能传给服务器去判断。

技术图片

 

    1、计算机的越来越好的同时,网上冲浪也越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条告诉你忘记填写一个必要的字段

 

    2、网景急于解决浏览器与用户交互这个问题。当时解决这个问题有两个办法,一个是采用现有的语言,比如Perl、Python、Tcl、Scheme等等,允许它们直接嵌入网页。另一个是发明一种全新的语言。这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。

 

    3、就在这时发生了一件大事,1995年Sun公司将Oak语言改名为Java,正式向市场推出。Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。

技术图片

 

    4、网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃

 

 

    5、总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。 因此,Javascript后来就是网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。

 

 

    6、此时,34岁的系统程序员(布兰登·艾奇)Brendan Eich登场了。

技术图片

 

    7、1995年4月,网景公司录用了他。Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。

 

    8、仅仅一个月之后,1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的 网页作者也能很快上手。 这个决策实际上将Perl、Tcl、Scheme等非面向对象编程的语言都排除在外了。

 

    9、Brendan Eich被指定为这种"简化版Java语言"的设计师。但是,他对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把JavaScript设计出来了。由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,JavaScript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?


  总的来说,他的设计思路是这样的:

 

    1. 借鉴C语言的基本语法;
    2. 借鉴Java语言的数据类型和内存管理;
    3. 借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
    4. 借鉴Self语言,使用基于原型(prototype)的继承机制。

 

  所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

编程语言分类之低级语言

  语言的高级和低级之分并不是说语言本身的层次高低,而是指的是与底层硬件的密切程度。就如同机器语言与汇编语言就是直接与底层硬件打交道的语言,故也被称为低级语言。

 

机器语言

  机器语言就是不通过任何操作系统直接与底层硬件打交道的语言,说白了就是计算机能读懂的二进制,想要使用机器语言就得充分的了解计算机底层硬件的各个知识。这可能会花上你半生的时间,但是机器语言的执行效率确是无与伦比的高,计算机不需要通过任何编译就能直接运行。但是它的开发效率却是慢到无与伦比,除了你需要去学习底层硬件相关的知识外还需要对每一条二进制指令烂熟于心,更加恐怖的是面对满屏的010101如果敲错一个字符就全部推倒重来,显然这已经超出了普通人所能承受的极限。

  

技术图片

总结

执行效率  -->  极高

开发效率  -->  极低

跨平台性  -->  极差

(由于必须依赖具体的硬件,故移植性极差)

 

汇编语言

  汇编语言仅仅是用一个英文标签代表一组二进制指令,毫无疑问,比起机器语言,汇编语言是一种进步,但汇编语言的本质仍然是直接操作硬件,因此汇编语言仍是比较低级/底层的语言、贴近计算机硬件。

 

技术图片

总结

执行效率  -->  极高

开发效率  -->  低

跨平台性  -->  极差

 

(同机器语言一样必须依赖具体的硬件,故移植性极差)

 

编程语言分类之高级语言

  高级语言并不关心底层硬件到底怎么样,因为高级语言是在和操作系统打交道。而操作系统又是管控硬件的软件,所以高级语言相较于低级语言来说它的开发效率肯定是要快上不上,但是执行效率却有所减缓。那么对于语言的好坏一味的按照执行效率来区分并非是正确的,语言本身只是一种工具,使用语言的人才是真正的操纵者。并且语言只有场景的适不适用而已,没有什么强弱之分。比如要对底层硬件进行开发,那么无疑汇编语言是最佳的选择,它能与本机硬件打交道所以能充分发挥自己执行效率高的特性,而要做一款网络爬虫等等的软件,由于网络具有延迟性会拖慢速度,故使用汇编语言来编写爬虫便成了弱势。其一是开发效率慢,其二是毫无必要。

  

  高级语言中按照翻译方式的不同又大体可分为两类,分别是编译性语言与解释性语言

 

编译性语言(如C语言)

  技术图片

  

  编译性语言总结

 

    1.执行效率高,并且生成的目标文件可以脱离语言环境独立执行(因为都是存的二进制指令)

    2.开发效率低,当程序需要修改则必须修改源程序中的代码后再次生成目标程序,倘若只有目标程序没有源程序则修改原本的功能是一件很困难的事情。

    3.跨平台性差,编译型代码只针对某一个平台下进行编译,当前平台下的编译结果(目标程序)无法拿到不同的平台上使用。

 

    其他:现在大多数的编程语言都是编译型的。编译程序(GCC)将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程序直接在计算机上多次运行。大多数软件产品都是以目标程序形式发行给用户的,不仅便于直接运行,同时又使他人难于盗用其中的技术。CC++AdaPascal都是编译实现的。

 

 

解释性语言(如Python)

 

技术图片

 

  解释性语言总结

 

    1.执行效率低解释型语言的实现中翻译器并不产生目标机器代码而是产生易于执行的中间代码这种中间代码与机器代码是不同的中间代码的解释是由软件支持的不能直接使用硬件软件解释器通常会导致执行效率较低

    2.开发效率高用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的与编译程序不同的是解释程序的任务是逐一将源程序的语句解释成可
执行的机器指令不需要将源程序翻译成目标代码再执行
解释程序的优点是当语句出现语法错误时可以立即引起程序员的注意而程序员在程序开发期间就能进行校
    3.跨平台性强代码运行是依赖于解释器不同平台有对应版本的解释器所以解释型的跨平台性强

    其他:对于解释型Basic语言需要一个专门的解释器解释执行Basic程序每条语句只有在执行时才被翻译这种解释型语言每执行一次就翻译一次因而效率低下一般地动态语言都是解释型的例如TclPerlRubyVBScriptJavaScript等

PS:混合型语言
  
  最典型的就是Java语言,首先生成Java汇编,然后通过虚拟机进一步转换成计算机可以识别的二进制汇编语言。

Python语言介绍

  Python这门语言于1989年的圣诞节期间诞生,它的创始人为吉多·范罗苏姆(Guido van Rossum)。PS:江湖人称龟叔,而Python这个名称的由来居然是因为 Guido 所喜欢的一部电视剧叫做 Monty Python‘s Flying。

 

  Guido希望这门语言能够符合他自己的理想:拥有C语言强大功能的同时并且拥有shell一般简洁的语法。所以Python是崇尚优美、清晰、简单的一门优秀的并且广泛使用的语言。

 

  C语言是非常重要的一门语言,同时也是编译性语言的代表,就是C语言奠定了后来风靡全球的Java以及目前势头大火的Python。Java和Python是基于C语言而开发来的,所以他们在代码转换过程中会先将自身的代码转变为字节码,然后通过字节码再转换为机器可读的机器码。这样的话执行效率相较于C语言就没有那么快,但是他们的优点是开发效率特别高。

 

  在Python中很容易写出来的一段程序,在C或者Java中你可能需要成百上千行的代码,Python有自带的垃圾回收机制,所以Python开发者并不用过分将注意力放在内存上面,但是C语言不同,开发人员选用C语言开发的话要时时刻刻注意内存的变化,而Python自问世以来,就已经继承了C的一套规则,使得使用Python开发不用过分专注内存这个点,所以这也是Python的一大优势。

 

  Python是一种跨平台语言。他的优点非常明显,简洁的设计,让人一目了然的语法以及赏心悦目式的缩进格式都使得Python成为新时代的宠儿,但是有一个致命的缺点就是Python的执行效率偏低。这显然不适合做很大的项目,那么是不是意味着Python没有很大的前途呢?当然不是,其实Python也分很多种类,下面会做一个大概的介绍。

 

 

  Python的应用领域十分广泛,如:人工智能,数据处理,爬虫,金融量化,云计算,WEB开发,自动化运维/测试,游戏开发,网络服务,图像处理等众多领域。并且国内外很多知名的企业也都在使用Python,如:Youtube、DropBox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo、FaceBook、NASA、百度、腾讯、汽车之家、美团等等。

技术图片

 

Python解释器介绍

  Python是一种跨平台语言。他的优点非常明显,简洁的设计,让人一目了然的语法以及赏心悦目式的缩进格式都使得Python成为新时代的宠儿,但是有一个致命的缺点就是Python的执行效率偏低与不支持并行。这显然不适合做很大的项目,那么是不是意味着Python没有很大的前途呢?当然不是,其实Python也分很多种类,我们常说的Python其实就是指的是CPython,另外还有JavaPython,lron Python等等不同的版本,那么他们其实就是基于Java和C#开发而来的Python。相较于常用的Cpython多了一个转换环节所以执行效率降低,在这里并不考虑,但是有一个Python变种却是非常的特殊,它弥补了CPython执行效率低下与不支持并行的特点,它就是PyPy

 

  PyPy的第一部分:用Python实现的Python

 

    其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。

 

  PyPy的第二部分:编译器

 

    这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:C,CIL,Javascript ...

 

  由于我们平常讲的Python实际上都为CPython,故我们接下来的学习也是围绕CPython(以下简称Python)学习的。目前Python版本已经更迭到了3.8.2。

 

  1989年,Guido开始写Python语言的编译器。 1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。

 

  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
  • Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010

In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible

Python 3.0 - December 3, 2008

  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015
  • Python 3.6 - 2016-12-23 发布python3.6.0版

 

  细心的读者会发现,08年时就推出了3.0,2010年反而又推出了2.7?是因为3.0不向下兼容2.0,而很多公司已经基于2.0版本开发出了大量程序,公司已然投入了大量的人财物力,这就导致大家都拒绝升级3.0,无奈官方只能推出2.7过渡版本,之后我们都应该采用3.0解释器开发程序,但为了方便读者维护2.0版本的软件,我们在遇到两种版本的差异时会专门指出来。

下载CPython解释器

  注意:这里没有收录MACOS系列的安装,故适用MACOS系统的朋友需自行搜索

 

  全平台:

    第一步:打开Python官网  https://www.python.org/

 

技术图片

 

  Wndows平台:

 

    第二步:下载相应的版本(这里推荐2个版本都下载)

 

技术图片

 

     第三步:下载Python 3.8.2

 

技术图片

 

    第四步:下载Python 2.7.18

 

技术图片

 

 

 

   Linux平台

 

    第二步:下载相应的版本(Linux一般自带Python2.x版本,所以只需要下载Python 3.x版本即可

 

技术图片

 

Windows平台安装Python解释器

  Python 2.x的安装流程

技术图片

技术图片

技术图片

技术图片

 


  Python 3.x的安装流程

技术图片

技术图片

 技术图片

 技术图片


   Python安装目录初识

  不管是Python 2.x版本还是Python 3.x版本。它们的安装目录中结构都是一样的,我们来简单的看一下:

 技术图片

 

   

  好了。现在我们的Python已经安装完毕了,我们试着进入Python解释器看看是否大功告成

 

技术图片

 

 

技术图片

 

 

Linux平台安装Python解释器

技术图片 

技术图片

技术图片

技术图片

 

那么至此,Linux平台的Python 3.x就配置完成了。

 

环境变量的配置

  在Windows平台进行安装Python解释器的时候我们发现一直会有一个提示添加到环境变量,那么环境变量到底是什么呢?别着急。我们来看图:

  技术图片

 

Windows平台配置环境变量

 

  那么如何配置环境变量呢?实际上也非常简单。首先我们的Windows平台上安装了2个版本的Python解释器,所以需要对他们进行一些处理才能保证2个版本的Python解释器都能使用。

 

技术图片

 技术图片

 

  接下来开始设置环境变量了。

 

技术图片

 技术图片

技术图片

技术图片

 

   

  好了。接下来进入终端开始测试。

 技术图片

 

 

  测试全部通过。都能够正常使用了。

 

Linux平台配置环境变量

 

技术图片

技术图片

技术图片

 

运行Python程序的2种方式

  现在。我们已经能够运行Python程序了,开始输入我们的第一条代码。

技术图片

技术图片

 

Python程序运行的底层三步骤

  一个Python程序被解释器解释并执行,其实大体上可以分为三个步骤:

  python c:/test/test.py

    1. 启动Python解释器
    2. Python解释器发起系统调用,将C盘下的test文件夹下的test.py文件内容读取到内存中。注意此时读取到的依然是普通字符。
    3. Python解释器开始以识别Python语法,解释并执行内存中存储的test.py文件的内容。

集成开发环境Pycharm下载与安装

  上面介绍了运行Python程序的2种方式,并且提到后面基本都会使用第二种方式也就是脚本调用的方式来执行Python程序,那么如果单纯的用文本编辑器的话其实并不是一个很好的选择(大佬除外),所以这边推荐使用集成开发环境Pycharm,对于开发人员来说集成开发环境是必不可少的工具。那么关于它的强大这里也不多做赘述了,使用一段时间后你就能切身的体会到。

 

  Pycharm官方链接:https://www.jetbrains.com/pycharm/

  一篇很好的Pycharm安装教程 <--- 点击跳转
 

虚拟环境介绍

  在安装好Pycharm之后。我们试着新建一个项目并且为它配置解释器:

 

技术图片

 

 

技术图片

 

  虚拟环境其实是真实的Python解释器的一份拷贝。由于真实的Python解释器可能在不断的添加各种第三方库,而我们的项目中又没有用到这些库所以就会造成一个环境的污染,比如打包成exe文件后体积过大等问题。所以一个项目的环境干净是十分重要的,而虚拟环境就是为了净化项目环境而生的一种措施。

 

技术图片

 


  参考文献

 

  Python快速入门神器:

https://zhuanlan.zhihu.com/c_1189883314197168128

  计算机发展和编程历史:

https://www.cnblogs.com/mlgjb/p/7991903.html

  

再次十分感谢!!!如果您觉得我的这篇文章还不错的话请点击推荐。谢谢!!!

 

 

Python学习准备工作

标签:python 1   通过   超出   内存回收   ott   c语言实现   block   由来   bit   

原文地址:https://www.cnblogs.com/vladimir/p/12773865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!