Python介绍以及安装html
做者:尹正杰java
版权声明:原创做品,谢绝转载!不然将追究法律责任。python
借用个人导师的一句话:当你看到这篇文章的时候,那么恭喜你,你已是踏入了开发的大门!欢迎加入:高级运维工程师之路 598432640 linux
一.Python语言介绍c++
说到Python语言,就不得不说一下它的创始人Guido van Rossum(1956 -- ?), 他在开发PYTHON语言以前曾使用过几年的ABC语言,ABC是一门主要用于教学目的语言(教计算机系的学生如何设计一门开发语言),程序员
Guido 在开发PYTHON时借鉴了不少ABC语言的特性,因此后来人们包括Guido本身也认为,PYTHON语言的前身就是ABC语言。关于创做PYTHON语言的初衷,Guido在1996年写到:web
Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office ... would be closed, but I算法
had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that wouldsql
appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus).数据库
翻译:
在六年前的1989.12月份,我为了在圣诞假期打发无聊时间找点事干(估计是写代码找不到对象),决定为我最近一直在构思的一门新的脚本语言写个解释器,这门语言的前身ABC(就Guido本人看来,ABC這種語言很是
优美和强大,是专门为专业的程序设计师使用的。可是ABC語言并无成功,究其缘由,吉多认为是非開放形成的。吉多決心在Python中避免這一错误,并取得了很是好的效果,完美结合了C和其余一些語言)语言更多
是被UNIX/C黑客使用,我选择PYTHONP这个名字作为这个开发项目的名字,起这个名字的一个缘由是由于我是Month Python’s Flying Circus(英国的一个电视喜剧)的超级粉丝。
就这样,python在Guido手中诞生了,它的第一个版本实现是在MAC电脑上,一直在90年代,PYTHON的开放性、语法的简洁性大受不少程序员的喜欢,不少人拿它来快速的开发一些脚本和工具,并不断的向官方提交新
的代码和第三方模块,所以PYTHON能作的事情也愈发多了起来,一些大公司像YAHOO、EBAY也开始在生产环境中使用PYTHON。到了2000年10月16号,PYTHON2.0发布了,相比以前的1.x版本,实现了完整的垃圾
回收,而且支持UNICODE,同时整个开发过程更加透明,社区对PYTHON的开发进度的影响逐渐增大。从2000年第一个2.0版本发布到写本书的2015止,2.X版本最主流使用的工业版本,虽然PYTHON官方于2008年就发
布了Python3.0,但因为此版本并不彻底兼容以前的普遍使用的2.4版本,这致使不少基于2.4开发软件跟本没法在3.0的平台 上运行,所以3.0的推广也很是缓慢,为解决这个问题,python官方很快又推出兼容2.4和3.0两
个版本的2.6,这个版本兼容了原来的2.4版本,又支持了不少3.0的特性,而且官方还开发了专门的帮助将2.x转为3.0版本的转换工具,所以,python3.0的使用才开始逐渐多了起来,不过,如今主流的工业版本依然是2.6
和2.7过渡版本,所以本书主要仍是围绕着2.7的版原本学习,不过同窗们不用担忧,由于2.7支持了很是多3.x版本的特性,等到几年后3.0版本普遍使用时,你由2.x转向3.x会像由 windows xp转向使用win 7同样简单。
再说回Guido, 这哥们如今还掌控着python的发展方向,他于2005年加入谷歌工做,所以也推进了python在谷歌内部实现了普遍使用,2012年,他加入世界上最大的云存储公司Dropbox,该公司产品几乎所有基于python
开发,全世界的用户天天在上面分享和上传超过10亿个文件。
二.Python 是一门什么样的语言?
编程语言主要从如下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每一个分类表明什么意思呢,咱们一块儿来看一下。
1.编译型和解释型
咱们先看看编译型,其实它和汇编语言是同样的:也是有一个负责翻译的程序来对咱们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序天然就称为编译器
(Compiler)。若是咱们写的程序代码都包含在一个源文件中,那么一般编译以后就会直接生成一个可执行文件,咱们就能够直接运行了。但对于一个比较复杂的项目,为了方便管理,咱们一般把代码分散在各个源文件中,
做为不一样的模块来组织。这时编译各个文件时就会生成目标文件(Object file)而不是前面说的可执行文件。通常一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已是可执行代码了,但因为只是
整个项目的一部分,因此咱们还不能直接运行。待全部的源文件的编译都大功告成,咱们就能够最后把这些半成品的目标文件“打包”成一个可执行文件了,这个工做由另外一个程序负责完成,因为此过程好像是把包含可执行代码
的目标文件链接装配起来,因此又称为连接(Link),而负责连接的程序就叫……就叫连接程序(Linker)。连接程序除了连接目标文件外,可能还有各类资源,像图标文件啊、声音文件啊什么的,还要负责去除目标文件之间的
冗余重复代码,等等,因此……也是挺累的。连接完成以后,通常就能够获得咱们想要的可执行文件了。
2.上面咱们大概地介绍了编译型语言的特色,如今再看看解释型。噢,从字面上看,“编译”和“解释”的确都有“翻译”的意思,它们的区别则在于翻译的时机安排不大同样。打个比方:假如你打算阅读一本外文书,而你不知道这门外语,
那么你能够找一名翻译,给他足够的时间让他从头至尾把整本书翻译好,而后把书的母语版交给你阅读;或者,你也马上让这名翻译辅助你阅读,让他一句一句给你翻译,若是你想往回看某个章节,他也得从新给你翻译。 两种方式,
前者就至关于咱们刚才所说的编译型:一次把全部的代码转换成机器语言,而后写成可执行文件;然后者就至关于咱们要说的解释型:在程序运行的前一刻,还只有源程序而没有可执行程序;而程序每执行到源程序的某一条指令,则
会有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行,总言之,就是不断地解释、执行、解释、执行……因此,解释型程序是离不开解释程序的。像早期的BASIC就是一门经典的解释型语言,要执行BASIC程序,
就得进入BASIC环境,而后才能加载程序源文件、运行。解释型程序中,因为程序老是以源代码的形式出现,所以只要有相应的解释器,移植几乎不成问题。编译型程序虽然源代码也能够移植,但前提是必须针对不一样的系统分别进行
编译,对于复杂的工程来讲,的确是一件不小的时间消耗,何况极可能一些细节的地方仍是要修改源代码。并且,解释型程序省却了编译的步骤,修改调试也很是方便,编辑完毕以后便可当即运行,没必要像编译型程序同样每次进行小
小改动都要耐心等待漫长的Compiling…Linking…这样的编译连接过程。不过凡事有利有弊,因为解释型程序是将编译的过程放到执行过程当中,这就决定了解释型程序注定要比编译型慢上一大截,像几百倍的速度差距也是不足为奇的。
3.编译型与解释型对比
二者各有利弊。前者因为程序执行速度快,同等条件下对系统要求较低,所以像开发操做系统、大型应用程序、数据库系统等时都采用它,像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则是“一次编码,处处编译”。呵呵,固然这些都是题外话了。总之,随着设计技术与硬件的不断发展,编译型与解释型两种方式的界限正在不断变得模糊。
4.动态语言和静态语言
一般咱们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
(1)动态类型语言:动态类型语言是指在运行期间才去作数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其余的各类脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言恰好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明全部变量的数据类型,C/C++是静态类型语言的典型表明,其余的静态类型语言还有C#、JAVA等。
对于动态语言与静态语言的区分,套用一句流行的话就是:Static typing when possible, dynamic typing when needed。
强类型定义语言和弱类型定义语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,若是不通过强制转换,那么它就永远是这个数据类型了。举个例子:若是你定义了一个整型变量a,那么程序根本不可能将a看成字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型能够被忽略的语言。它与强类型定义语言相反, 一个变量能够赋不一样数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,可是强类型定义语言带来的严谨性可以有效的避免许多错误。另外,“这门语言是否是动态语言”与“这门语言是否类型安全”之间是彻底没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
经过上面这些介绍,咱们能够得出,python是一门动态解释性的强类型定义语言。那这些基因使成就了Python的哪些优缺点呢?咱们继续往下看。
四.Python能作什么?
Python是一门综合性的语言,你几乎能在计算机上经过Python作任何事情,如下是Python应该最普遍的几个方面:
五.Python的优缺点
先看优势
再看缺点:
固然,Python还有一些其它的小缺点,在这就不一一列举了,我想说的是,任何一门语言都不是完美的,都有擅长和不擅长作的事情,建议各位不要拿一个语言的劣势去跟另外一个语言的优点来去比较,语言只是一个工具,是实现程序设计师思想的工具,就像咱们以前中学学几什么时候,有的时候须要要圆规,有的时候须要用三角尺同样,拿相应的工具去作它最擅长的事才是正确的选择。以前不少人问我Shell和Python到底哪一个好?我回答说Shell是个脚本语言,但Python不仅是个脚本语言,能作的事情更多,而后又有钻牛角尖的人说彻底不必学Python, Python能作的事情Shell均可以作,只要你足够牛B,而后又举了用Shell能够写俄罗斯方块这样的游戏,对此我能说表达只能是,不要跟SB理论,SB会把你拉到跟他同样的高度,而后用充分的经验把你打倒。
六.Python的变量及数据类型
1.变量
在计算机中,变量就是用来在程序运行期间存储各类须要临时保存能够不断改变的数据的标识符,一个变量应该有一个名字,而且在内存中占据必定的存储单元,在该存储单元中存放变量的值。请注意区分变量名和变量值这两个不一样的概念
变量命名规则
先介绍标识符的概念。和其余高级语言同样,用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符(identifier)。简单地说,标识符就是一个名字。变量名是标识符的一种,变量的名字必须遵循标识符的命名规则。
Python语言和java,c++等不少语言同样,规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。下面列出的是合法的标识符,也是合法的变量名:
sum, average, total, day, month, Student_name, tan, BASIC, li_ling
下面是不合法的标识符和变量名:
M.D.John, $442, #4, 3G64, Alex Li, C++, Zhang-ling,姓名, U.S.A.
注意:在Python中,大写字母和小写字母被认为是两个不一样的字符。所以,sum和SUM是两个不一样的变量名。通常地,变量名用小写字母表示,与人们平常习惯一致,以增长可读性。应注意变量名不能与Python的关键字、系统函数名和类名相同。
变量名命名习惯
当你的代码越写越多的时候,你会发现你定义的变量也会愈来愈多,为了增长代码的易读性和方便调试,给变量起名时必定要遵循必定的命名习惯,你起的变量名称最好能让人一眼就大概知道这个变量是干什么用的,好比,getUserName一看就知道,这个变量应该是要获取用户的姓名,check_current_conn_count表明是要检查如今的链接数,只有这样,别人才能在看你的代码时知道你的这些变量的做用,而若是你把变量名全起成了var1,var2,var3…..varN,那别人再看你的代码时会骂死你的。
变量名的定义在能表达清楚它的做用的前提下最越简洁越好,能用一个单词表述清楚的尽可能就不要用两个。变量起名时通常有这么几种写法,你以为哪一种最简洁,你就选哪一种吧。
CheckCurrentConnCount
check_current_conn_count
checkCurrentConnCount
很差的起名:
CHECKCURRENTCONNCOUNT
Var1 var2 var3 varN
Checkcurrentconncount
定义变量
了解了变量的概念和用途后,咱们一块儿来定义几个简单的变量看一下
name = ‘Alex Li’ #name 是字符串,字符串要加上引号噢
age = 29 #age 是整数,整数不要加引号,加了引号后就变成字符串了
has_girlfriend = False #是布尔值,通常用这个作逻辑判断,如if has_girlfriend:print ‘good for you !’
age = age + 1 #这个结果应该是30,运算流程是先将=号后面的age +1结果算出,而后再把这个结果重赋值给age, 因为age以前的值是29,从新赋值后,age值变为30.
最后,理解变量在计算机内存中的表示也很是重要。当咱们写:
name = 'Alex'
时,Python解释器干了两件事情:
也能够变量name赋值给另外一个变量name2,这个操做其实是把变量name2指向的数据,例如:
唉?不是已经把name2 等于name变量了吗?name 值改了之后,name2不跟着改吗?没错,当name 的值由”Alex”改为”Jack”后,name2仍是指向原来的”Alex”,咱们来一步步分析一下:
1. 定义name=”Alex”,解释器建立了字符串”Alex”和变量name,并把name指向了”Alex”
2. 执行name2=name,解释器建立了name2变量,并把name2指向了name变量所指向的字符串
3. 这时经过id内置函数来查看一下这两个变量分别指向的内存地址,结果都是指向了同一地址。
4. 执行name=”Jack”,解释器建立一个新的变量”Jack”,并把name的指向改为了”Jack”
5. 此时再查看两个变量的内存地址指向就会发现,name的指向已经变成了一个新的地址,也就是”Jack”所在内存地址,可是name2依然仍是指向原来的”Alex”。
Now, 你明白了吗? 再总结一下,当你把一个变量name赋值给另外一个变量name2时,解释器只是把name变量所指向的内存地址赋值给了name2,所以name 和 name2并未发生直接的关联,只不过是他们都同时指向了同一个内存地址而已,这也就是为何你把name再指向一个新地址后,而name2的值还保持不变的缘由。
2.数据类型
一个程序要运行,就要先描述其算法。描述一个算法应先说明算法中要用的数据,数据以变量或常量的形式来描述。每一个变量或常量都有数据类型。Python的基本数据类型有5种: 整型(int), 浮点型(float), 字符型(string), 布尔型(bool),空值(None).
3.整数(int)
Python可处理任意大小的整数,在程序中的表示方法和数学上的写法彻底同样。
4.浮点数(浮点数)
浮点数也就是小数,之因此称为浮点数,是由于按照科学记数法表示时,一个浮点数的小数点位置是可变的,好比,1.23x109和12.3x108是相等的。浮点数能够用数学写法,如1.23
,3.14
,-9.01
,等等。可是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9
,或者12.3e8
,0.000012能够写成1.2e-5
,等等。
整数和浮点数在计算机内部存储的方式是不一样的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的偏差。
字符串是以''或""括起来的任意文本。好比'abc'
,"xyz"
等等。请注意,''或""自己只是一种表示方式,不是字符串的一部分,所以,字符串'abc'
只有a
,b
,c
这3个字符。若是'
自己也是一个字符,那就能够用""括起来,好比"I'm OK"
包含的字符是I
,'
,m
,空格,O
,K
这6个字符。
6.布尔值
布尔值和布尔代数的表示彻底一致,一个布尔值只有True
、False
两种值,要么是True
,要么是False
7.and
、or
和not
运算
and运算是与运算,只有全部都为True,and运算结果才是True;
or运算是或运算,只要其中有一个为True,or运算结果就是True;
not运算是非运算,它是一个单目运算符,把True变成False,False变成True;
8.空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,由于0
是有意义的,而None
是一个特殊的空值。
9.常量
刚才说到了变量,还有一律念就是常量,所谓常量就是不能变的变量,好比经常使用的数学常数π就是一个常量。在Python中,一般用所有大写的变量名表示常量
PI = 3.14159265359
但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,因此,用所有大写的变量名表示常量只是一个习惯上的用法,若是你必定要改变变量PI的值,也没人能拦住你。
10.数据运算符
和其它语言同样,python也支持进行各类各样的数学和逻辑运算,咱们一块儿来看一些。
python语言支持如下几种运算
算术运算
比较运算
Assignment Operators
二进制运算
关系运算
验证运算
算术运算
如下例子a = 10 , b= 20
比较运算
如下例子a = 10 , b= 20
赋值运算
按位运算(二进制运算)
咱们都知道,计算机处理数据的时候都会把数据最终变成0和1的二进制来进行运算,也就是说,计算机其实只认识0和1, 那按位运算其实就是把数字转换成二进制的形式后再进行位运算的,唉呀,说的好迷糊,直接看例子,咱们设定a=60; b=13; 要进行位运算,就得把他们先转成2进制格式,那0和1是如何表示60和13的呢?学过计算机基础的人都知道,计算机最小的存储单位是字节,也就是说一个数字、一个字母最少须要用一个字节来存储,而后呢,一个字节又由8个2进制位来表示,也就是8bit,因此呢,一个计算机中最小的数据也须要用一个字节来存储噢。那为是什么8位而不是9位、10位、20位呢?这个问题上学的时候应该都讲过,不明白的本身网上查下吧再。8个二进制如何表示60这个数字呢?聪明的计算机先人们想到了用占位的方式来轻松的实现了,怎么占位呢?以下表所示,咱们把8个二进制位依次排列,每一个二进制位表明一个固定的数字,这个数字是由2的8次方得来的,即每一个二进制位表明的值就是2的第几回方的值,8个二进制位能表示的最大数是2**8=256, 那把60分解成二进制其实就是以此在这8位上作个比对,只要把其中的几位相加,若是结果正好等于60,那这个位就找对了,首先看60 确定占不了128和64那两位,不占位就设为0,后面的32+16+8+4=60,因此这几位要设置为1,其它的全设置为0,13的二进制算法也是同样的。
好,知道了10进制如何转2进制了以后,咱们接着来看,若是进行2个10进制数字的位运算
看下面的运算过程:
后面还有
逻辑运算符 and 、or 、not
关系运算符 in 、not in
验证运算符 is 、 is not
字符编码编码后期我会在博客更新关于它的内容。
七.在CentOs服务器上源码安装python3.5
注意:
若是服务器是redhat或者是centos发现版本的linux系统,在升级python版本以后,大家yum将没法使用,不要问我为何,由于yum是python写的!升级版本以后可能存在版本的不兼容性致使的!
固然若是你说你安装服务包历来就没有用过Yum安装,只用rpm或者是源码安装的话,那么您能够忽略这个注意提示!!!
1.系统环境介绍
2.安装依赖包
[root@yinzhengjie packages]# yum -y groupinstall "Development tools"
[root@yinzhengjie packages]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
3.下载python3.5安装包
[root@yinzhengjie python]# wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
[root@yinzhengjie python]# tar -xf Python-3.5.0.tgz
[root@yinzhengjie python]# cd Python-3.5.0
[root@yinzhengjie Python-3.5.0]# ./configure --prefix=/usr/local --enable-shared //指定安装路径,并生成动态连接库
[root@yinzhengjie Python-3.5.0]# make -j 4 && make install
[root@yinzhengjie Python-3.5.0]# ln -s /usr/local/bin/python3 /usr/bin/python3
4.生成动态库信息并验证
[root@yinzhengjie Python-3.5.0]# echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf
[root@yinzhengjie Python-3.5.0]# ldconfig
[root@yinzhengjie Python-3.5.0]# python3 --version
Python 3.5.0
[root@yinzhengjie Python-3.5.0]#
5.定义一个别名,这样就不用每次tab出来还要选择 了
[root@yinzhengjie Python-3.5.0]# echo “#Add python3.5 alias by yinzhengjie” >> /etc/bashrc
[root@yinzhengjie Python-3.5.0]# echo "alias py=python3” >> /etc/bashrc
[root@yinzhengjie Python-3.5.0]# alias py=python3
[root@yinzhengjie Python-3.5.0]# py --version
Python 3.5.0
[root@yinzhengjie Python-3.5.0]#
八.在windows系统下安装python3.6
1.登录官网地址:https://www.python.org/,下载安装包
2.安装python
3.选择安装参数,
4.等待安装成功
5.打开cmd窗口
6.若是出现以下界面共享你安装成功
7.退出python解释器工做环境
九.mac系统安装python
1.登录官网地址:https://www.python.org/,下载安装包
2.下载成功后,执行该软件包
3.点击赞成安装协议便可
4.点击继续
5.安装python
6.输入你本身的电脑密码
7.安装成功
8.测试安装的结果
注:本文有引用连接:http://www.cnblogs.com/alex3714/p/4296002.html