首页 后端开发 Python教程 Python简介及入门指导

Python简介及入门指导

Jul 18, 2017 am 11:27 AM
python 简介

2017-07-15,这是我学习python的第一天。

  首先,python是一门当下很火热的开发语言,它的创始人是Guido Van Rossum。就目前情况而言,python语言的热度持续上升,已经超过C#排名第四。Python崇尚优美,简洁,清晰,是一种优秀并且广泛使用的语言。

一、Python是一门解释型语言,边运行变解释。

  首先解释一下编译器,它是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行起来的时候,机器直接根据编译好的二进制文件来运行此文件,执行速度很快。而解释器就不同了,解释器是在程序执行时,才会一条条的解释成机器语言给计算机执行。所以显而易见,执行速度并没有编译后的文件运行的快。这也是因为计算机不能直接识别我们所写的代码并且执行,只能认识计算机语言(即二进制文件)。

  编译型VS解释型

  编译型

  优点:编译器有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要再次编译,所以编译语言的执行效率很高。可以脱离语言环境直接运行。

  缺点:编译器编译好程序后,如果对代码进行修改就需要重新编译。编译时根据对应的运行环境生成机器码,不同操作系统之间移植就会有问题,需要根据所需运行的操作系统的环境编译成不同的可执行文件。

  解释型:

  优点:有良好的平台兼容性,在任何环境中都能运行,前提是安装了解释器(虚拟机)。因为是动态解释,所以程序自身很灵活,修改代码的时候没有顾虑直接修改直接运行,可以快速部署,程序更新不需要shut down维护。

  缺点:每次执行代码都需要一直伴随着动态解释的过程。性能上不如编译型语言。

 

为什么是Python而不是其他语言?

C 和 Python、Java、C#等

    C语言: 代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作

其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行

Python 和 C  Python这门语言是由C开发而来

  对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
  对于速度:Python的运行速度相较与C,绝逼是慢了

Python 和 Java、C#等

  对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持
  对于速度:Python在速度上可能稍显逊色

所以,Python和其他语言没有什么本质区别,其他区别在于:擅长某领域、人才丰富、先入为主。

 

Python的种类

Cpython
    Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。

Jyhton
    Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。

IronPython
    Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)

PyPy(特殊)
    Python实现的Python,将Python的字节码字节码再编译成机器码。

RubyPython、Brython ...


一、低级语言与高级语言
最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。
高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。

二、编译与解释
编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.

 

编译型和解释型 我们先看看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(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是静态语言,是强类型定义语言(类型安全的语言)。

 

通过上面这些介绍,我们可以得出,python是一门动态解释性的强类型定义语言。那这些基因使成就了Python的哪些优缺点呢?我们继续往下看。

  Python的优缺点

  先看优点

  1. Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

  2. 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

  3. 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

  4. 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

  5. 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

  6. 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

  再看缺点:

  1. 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。

  2. 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。

  3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

 

当然,Python还有一些其它的小缺点,在这就不一一列举了,我想说的是,任何一门语言都不是完美的,都有擅长和不擅长做的事情,建议各位不要拿一个语言的劣势去跟另一个语言的优势来去比较,语言只是一个工具,是实现程序设计师思想的工具,就像我们之前中学学几何时,有的时候需要要圆规,有的时候需要用三角尺一样,拿相应的工具去做它最擅长的事才是正确的选择。之前很多人问我Shell和Python到底哪个好?我回答说Shell是个脚本语言,但Python不只是个脚本语言,能做的事情更多,然后又有钻牛角尖的人说完全没必要学Python, Python能做的事情Shell都可以做,只要你足够牛B,然后又举了用Shell可以写俄罗斯方块这样的游戏,对此我能说表达只能是,不要跟SB理论,SB会把你拉到跟他一样的高度,然后用充分的经验把你打倒。

 

以上是Python简介及入门指导的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DeepSeekapi怎么接入-DeepSeekapi接入调用教程 DeepSeekapi怎么接入-DeepSeekapi接入调用教程 Mar 12, 2025 pm 12:24 PM

DeepSeekAPI接入与调用详解:快速上手指南本文将详细指导您如何接入和调用DeepSeekAPI,助您轻松使用强大的AI模型。第一步:获取API密钥访问DeepSeek官方网站,点击右上角的“开放平台”。您将获得一定数量的免费Tokens(用于计量API使用量)。在左侧菜单中,点击“APIKeys”,然后点击“创建APIkey”。为您的APIkey命名(例如,“test”),并立即复制生成的密钥。请务必妥善保存此密钥,因为它只会显示一次

量化炒币交易软件 量化炒币交易软件 Mar 19, 2025 pm 04:06 PM

本文深入探讨了币安(Binance)、欧易(OKX)和芝麻开门(Gate.io)三大交易所的量化交易功能,旨在帮助量化交易者选择合适的平台。文章首先介绍了量化交易的概念、优势及挑战,并阐述了优秀量化交易软件应具备的功能,例如API支持、数据源、回测工具和风控功能等。随后,对三家交易所的量化交易功能进行了详细对比分析,分别指出了它们的优劣势,最终给出了针对不同经验水平的量化交易者的平台选择建议,并强调了风险评估和策略回测的重要性。 无论您是新手还是经验丰富的量化交易者,本文都将为您提供有价值的参

deepseek如何本地部署r1模型-deepseek本地安装r1模型教程 deepseek如何本地部署r1模型-deepseek本地安装r1模型教程 Mar 12, 2025 pm 12:15 PM

DeepSeekR1模型本地部署指南:释放数据分析与预测潜能DeepSeek是一款功能强大的数据分析和预测工具,其R1模型能够为各种应用场景提供高效精准的模型支持。本指南将详细介绍如何在本地环境中部署DeepSeekR1模型,助您快速上手并充分利用其强大功能。DeepSeekR1模型本地部署步骤准备阶段系统要求:请确保您的本地机器满足DeepSeek的最低系统配置要求(具体要求请参考DeepSeek官方文档)。软件安装:下载并安装DeepSeek官方提供的安装包,并按照安装指南完

Deepseek如何用Python实现调用-Deepseek Python调用方法指南 Deepseek如何用Python实现调用-Deepseek Python调用方法指南 Mar 12, 2025 pm 12:51 PM

DeepSeek深度学习库Python调用指南DeepSeek是一个功能强大的深度学习库,可用于构建和训练各种神经网络模型。本文将详细介绍如何使用Python调用DeepSeek进行深度学习开发。使用Python调用DeepSeek的步骤1.安装DeepSeek确保已安装Python环境和pip工具。使用以下命令安装DeepSeek:pipinstalldeepseek2.导入DeepSeek库在Python脚本或JupyterNotebook中导入DeepSeek库:impor

币安Alpha是什么 币安Alpha是什么 Mar 25, 2025 pm 03:39 PM

安币Alpha是币安平台上为专业交易者和投资者提供的工具和服务聚合平台。它的核心功能包括:1.策略广场,汇集不同交易策略;2.策略构建器,允许自定义交易策略;3.高级数据分析,提供市场分析工具;4.机构级服务,满足专业投资者的需求。

哪些交易所可以通过交易端发送期权对冲指令 哪些交易所可以通过交易端发送期权对冲指令 Mar 28, 2025 pm 03:27 PM

截至2024年,支持通过交易终端直接发送期权对冲指令的主流加密货币交易所有:1. Deribit,支持Delta对冲、Gamma Scalping等高级策略,提供网页版/API一键对冲;2. OKX,支持波动率对冲和策略组合工具,网页端/APP内置对冲面板;3. Binance,支持保护性对冲,需手动或API组合仓位;4. CME,提供标准期权,需通过经纪商接入;5. LedgerX,提供专业级对冲工具,需机构认证。

如何在LAMP架构下高效整合Node.js或Python服务? 如何在LAMP架构下高效整合Node.js或Python服务? Apr 01, 2025 pm 02:48 PM

在LAMP架构下整合Node.js或Python服务许多网站开发者都面临这样的问题:已有的LAMP(Linux Apache MySQL PHP)架构网站需要...

Python如何高效解析LaTeX公式中的多层嵌套括号并转换为多维字典? Python如何高效解析LaTeX公式中的多层嵌套括号并转换为多维字典? Apr 01, 2025 am 08:57 AM

Python解析LaTeX多层括号:构建多维字典许多LaTeX...

See all articles