一嗤放、Python簡(jiǎn)介和入門

圖片來(lái)自網(wǎng)絡(luò)

文/Bruce.Liu1

1.Python前世今生

1.1.Python歷史

Python的創(chuàng)始人: Guido van Rossum;之所以選中Python(大蟒蛇的意思)作為該編程語(yǔ)言的名字赐写,是因?yàn)樗且粋€(gè)叫Monty Python的喜劇團(tuán)體的愛好者求豫。

誕生于1989年。作者前身也是C++程序員膨更,之前也參加設(shè)計(jì)了一種叫ABC的教學(xué)語(yǔ)言妙真,就Guido本人看來(lái),ABC 這種語(yǔ)言非常優(yōu)美和強(qiáng)大荚守,是專門為非專業(yè)程序員設(shè)計(jì)的珍德。但是ABC語(yǔ)言并沒有成功,究其原因矗漾,Guido 認(rèn)為是其非開放造成的(相對(duì)封閉的開發(fā)語(yǔ)言锈候、擴(kuò)展性、推廣性相對(duì)不太成功敞贡。)泵琳。Guido 決心在Python 中避免這一錯(cuò)誤。同時(shí)誊役,他還想實(shí)現(xiàn)在ABC 中閃現(xiàn)過但未曾實(shí)現(xiàn)的東西获列。

圖片來(lái)自網(wǎng)絡(luò)
  • 1991年,第一個(gè)Python編譯器誕生蛔垢。它是用C語(yǔ)言實(shí)現(xiàn)的击孩,并能夠調(diào)用C語(yǔ)言的庫(kù)文件。從一出生鹏漆,Python已經(jīng)具有了:類巩梢,函數(shù),異常處理艺玲,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型且改,以及模塊為基礎(chǔ)的拓展系統(tǒng)。
  • 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板驳,加入了內(nèi)存回收機(jī)制又跛,構(gòu)成了現(xiàn)在Python語(yǔ)言框架的基礎(chǔ)
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 3.0 - December 3, 2008
  • Python 3.1 - June 27, 2009
  • 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.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015

1.2.熱門排行

最新的TIOBE排行榜,Python趕超PHP占據(jù)第四若治。

圖片來(lái)自網(wǎng)絡(luò)

由上圖可見慨蓝,Python整體呈上升趨勢(shì)感混,反映出Python應(yīng)用越來(lái)越廣泛并且也逐漸得到業(yè)內(nèi)的認(rèn)可!

圖片來(lái)自網(wǎng)絡(luò)

IEEE Spectrum (電氣和電子工程師協(xié)會(huì)) 2017 編程語(yǔ)言 Top 10
http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2017

  • Python 的排名從去年開始就在持續(xù)上升礼烈,并躍至第一腮恩。但排在前四名的語(yǔ)言 Python毅往、C、Java 和 C++ ,其實(shí)都保持著非常接近的流行度全释。
圖片來(lái)自網(wǎng)絡(luò)

1.3.Python應(yīng)用領(lǐng)域

  • 云計(jì)算

云計(jì)算最火的語(yǔ)言, 典型應(yīng)用OpenStack

  • WEB開發(fā)

python相比php\ruby的模塊化設(shè)計(jì)拣展,非常便于功能擴(kuò)展拜银;多年來(lái)形成了大量?jī)?yōu)秀的web開發(fā)框架,并且在不斷迭代阴汇;如目前優(yōu)秀的全棧的django数冬、框架flask,都繼承了python簡(jiǎn)單搀庶、明確的風(fēng)格拐纱,開發(fā)效率高、易維護(hù)哥倔,與自動(dòng)化運(yùn)維結(jié)合性好秸架,python已經(jīng)成為自動(dòng)化運(yùn)維平臺(tái)領(lǐng)域的事實(shí)標(biāo)準(zhǔn);眾多大型網(wǎng)站均為Python開發(fā)咆蒿,Youtube, Dropbox, 豆瓣咕宿。

  • 人工智能

基于大數(shù)據(jù)分析和深度學(xué)習(xí)而發(fā)展出來(lái)的人工智能本質(zhì)上已經(jīng)無(wú)法離開python的支持,目前世界優(yōu)秀的人工智能學(xué)習(xí)框架如Google的TransorFlow 蜡秽、FaceBook的PyTorch以及開源社區(qū)的神經(jīng)網(wǎng)絡(luò)庫(kù)Karas等是用python實(shí)現(xiàn)的府阀,甚至微軟的CNTK(認(rèn)知工具包)也完全支持Python,而且微軟的Vscode都已經(jīng)把Python作為第一級(jí)語(yǔ)言進(jìn)行支持芽突。

  • 系統(tǒng)運(yùn)維

Python在與操作系統(tǒng)結(jié)合以及管理中非常密切试浙,目前所有l(wèi)inux發(fā)行版中都帶有python,且對(duì)于linux中相關(guān)的管理功能都有大量的模塊可以使用寞蚌,例如目前主流的自動(dòng)化配置管理工具:SaltStack Ansible(目前是RedHat的)田巴。目前在幾乎所有互聯(lián)網(wǎng)公司,自動(dòng)化運(yùn)維的標(biāo)配就是python+Django/flask挟秤,另外壹哺,在虛擬化管理方面已經(jīng)是事實(shí)標(biāo)準(zhǔn)的openstack就是python實(shí)現(xiàn)的,所以Python是所有運(yùn)維人員的必備技能艘刚。

  • 金融

量化交易管宵,金融分析,在金融工程領(lǐng)域,Python不但在用箩朴,且用的最多岗喉,而且重要性逐年提高。原因:作為動(dòng)態(tài)語(yǔ)言的Python炸庞,語(yǔ)言結(jié)構(gòu)清晰簡(jiǎn)單钱床,庫(kù)豐富,成熟穩(wěn)定埠居,科學(xué)計(jì)算和統(tǒng)計(jì)分析都很牛逼查牌,生產(chǎn)效率遠(yuǎn)遠(yuǎn)高于c,c++,java,尤其擅長(zhǎng)策略回測(cè)

  • 大數(shù)據(jù)

Python相對(duì)于其它解釋性語(yǔ)言最大的特點(diǎn)是其龐大而活躍的科學(xué)計(jì)算生態(tài),在數(shù)據(jù)分析滥壕、交互纸颜、可視化方面有相當(dāng)完善和優(yōu)秀的庫(kù)(python數(shù)據(jù)分析棧:Numpy Pandas Scipy Matplotlip Ipython), 并且還形成了自己獨(dú)特的面向科學(xué)計(jì)算的Python發(fā)行版Anaconda捏浊,而且這幾年一直在快速進(jìn)化和完善,對(duì)傳統(tǒng)的數(shù)據(jù)分析語(yǔ)言如R MATLAB SAS Stata形成了非常強(qiáng)的替代性撞叨。

  • 圖形GUI

PyQT, WxPython,TkInter

1.4.Python行業(yè)應(yīng)用

  • CIA:美國(guó)中情局網(wǎng)站就是用Python開發(fā)的
  • NASA:美國(guó)航天局(NASA)1994年起把python作為主要開發(fā)語(yǔ)言(使用Python進(jìn)行數(shù)據(jù)分析和運(yùn)算)
  • Google:Google App Engine 金踪、code.google.com 、Google earth 牵敷、谷歌爬蟲胡岔、Google廣告等項(xiàng)目都在大量使用Python開發(fā)
  • Facebook:大量的基礎(chǔ)庫(kù)均通過Python實(shí)現(xiàn)的
  • YouTube:世界上最大的視頻網(wǎng)站YouTube就是用Python開發(fā)的
  • Dropbox:美國(guó)最大的在線云存儲(chǔ)網(wǎng)站,全部用Python實(shí)現(xiàn)枷餐,每天網(wǎng)站處理10億個(gè)文件的上傳和下載
  • Instagram:美國(guó)最大的圖片分享社交網(wǎng)站靶瘸,每天超過3千萬(wàn)張照片被分享,全部用python開發(fā)
  • Redhat:世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用python開發(fā)的
  • 豆瓣:公司幾乎所有的業(yè)務(wù)均是通過Python開發(fā)的
  • 知乎:國(guó)內(nèi)最大的問答社區(qū)毛肋,通過Python開發(fā)(國(guó)外Quora)

2.編程語(yǔ)言簡(jiǎn)介和特點(diǎn)

編程語(yǔ)言主要從以下幾個(gè)角度為進(jìn)行分類怨咪,編譯型和解釋型、靜態(tài)語(yǔ)言和動(dòng)態(tài)語(yǔ)言润匙、強(qiáng)類型定義語(yǔ)言和弱類型定義語(yǔ)言诗眨,每個(gè)分類代表什么意思呢,我們一起來(lái)看一下孕讳。

2.1.編譯和解釋型語(yǔ)言的區(qū)別

CPU不能直接認(rèn)識(shí)并執(zhí)行我們寫的語(yǔ)句,它只能認(rèn)識(shí)機(jī)器語(yǔ)言(CPU指令集匠楚;二進(jìn)制的形式);因此我們開發(fā)語(yǔ)言的Virtual Machine要將識(shí)別的開發(fā)語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言讓CPU去執(zhí)行厂财;那么就有兩種以下兩種方式:

  • 編譯器是把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快;

  • 解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.

編譯型 解釋型 混合型
C Java Script Java
C++ Python C#
GO Ruby N/A
Swift PHP N/A
Ojbect-C Perl N/A

2.2.編譯和解釋型優(yōu)缺點(diǎn)

編譯型
  • 優(yōu)點(diǎn):編譯器一般會(huì)有預(yù)編譯的過程對(duì)代碼進(jìn)行優(yōu)化芋簿。因?yàn)榫幾g只做一次,運(yùn)行時(shí)不需要編譯璃饱,所以編譯型語(yǔ)言的程序執(zhí)行效率高与斤。可以脫離語(yǔ)言環(huán)境獨(dú)立運(yùn)行。
  • 缺點(diǎn):編譯之后如果需要修改就需要整個(gè)模塊重新編譯幽告。編譯的時(shí)候根據(jù)對(duì)應(yīng)的運(yùn)行環(huán)境生成機(jī)器碼梅鹦,不同的操作系統(tǒng)之間移植就會(huì)有問題,需要根據(jù)運(yùn)行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件冗锁。
解釋型
  • 優(yōu)點(diǎn):有良好的平臺(tái)兼容性齐唆,在任何環(huán)境中都可以運(yùn)行,前提是安裝了解釋器(虛擬機(jī))冻河。靈活箍邮,修改代碼的時(shí)候直接修改就可以,可以快速部署叨叙,不用停機(jī)維護(hù)锭弊。
  • 缺點(diǎn):每次運(yùn)行的時(shí)候都要解釋一遍,性能上不如編譯型語(yǔ)言擂错。

2.3.靜態(tài)和動(dòng)態(tài)語(yǔ)言

通常我們所說的動(dòng)態(tài)語(yǔ)言味滞、靜態(tài)語(yǔ)言是指動(dòng)態(tài)類型語(yǔ)言和靜態(tài)類型語(yǔ)言。

  • 動(dòng)態(tài)類型語(yǔ)言:

動(dòng)態(tài)類型語(yǔ)言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言钮呀,也就是說剑鞍,在用動(dòng)態(tài)類型的語(yǔ)言編程時(shí),永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型爽醋,該語(yǔ)言會(huì)在你第一次賦值給變量時(shí)蚁署,在內(nèi)部將數(shù)據(jù)類型記錄下來(lái)。Python和Ruby就是一種典型的動(dòng)態(tài)類型語(yǔ)言蚂四,其他的各種腳本語(yǔ)言如VBScript也多少屬于動(dòng)態(tài)類型語(yǔ)言光戈。

  • 靜態(tài)類型語(yǔ)言:

靜態(tài)類型語(yǔ)言與動(dòng)態(tài)類型語(yǔ)言剛好相反,它的數(shù)據(jù)類型是在編譯其間檢查的遂赠,也就是說在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型久妆,C/C++是靜態(tài)類型語(yǔ)言的典型代表,其他的靜態(tài)類型語(yǔ)言還有C#跷睦、JAVA等镇饺。

2.4.強(qiáng)類型和弱類型定義語(yǔ)言

強(qiáng)類型定義語(yǔ)言在速度上可能略遜色于弱類型定義語(yǔ)言,但是強(qiáng)類型定義語(yǔ)言帶來(lái)的嚴(yán)謹(jǐn)性能夠有效的避免許多錯(cuò)誤送讲。另外奸笤,“這門語(yǔ)言是不是動(dòng)態(tài)語(yǔ)言”與“這門語(yǔ)言是否類型安全”之間是完全沒有聯(lián)系的!

例如:

  • Python是動(dòng)態(tài)語(yǔ)言哼鬓,是強(qiáng)類型定義語(yǔ)言(類型安全的語(yǔ)言); VBScript是動(dòng)態(tài)語(yǔ)言监右,是弱類型定義語(yǔ)言(類型不安全的語(yǔ)言);

  • JAVA是靜態(tài)語(yǔ)言,是強(qiáng)類型定義語(yǔ)言(類型安全的語(yǔ)言)异希。

  • 強(qiáng)類型定義語(yǔ)言:

強(qiáng)制數(shù)據(jù)類型定義的語(yǔ)言健盒。也就是說,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換扣癣,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了惰帽。舉個(gè)例子:如果你定義了一個(gè)整型變量a,那么程序根本不可能將a當(dāng)作字符串類型處理。強(qiáng)類型定義語(yǔ)言是類型安全的語(yǔ)言父虑。

  • 弱類型定義語(yǔ)言:

數(shù)據(jù)類型可以被忽略的語(yǔ)言该酗。它與強(qiáng)類型定義語(yǔ)言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類型的值。

通過上面這些介紹士嚎,我們可以得出呜魄,python是一門動(dòng)態(tài)解釋性的強(qiáng)類型定義語(yǔ)言。

3.What is Python?

3.1.Python哲學(xué)

Python開發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來(lái)做一件事”莱衩。在設(shè)計(jì)Python語(yǔ)言時(shí),如果面臨多種選擇,Python開發(fā)者一般會(huì)拒絕花俏的語(yǔ)法,而選擇明確沒有或者很少有歧義的語(yǔ)法爵嗅。這些準(zhǔn)則被稱為“Python格言”。在Python解釋器內(nèi)運(yùn)行import this可以獲得完整的列表笨蚁。

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
......  ......
  • 優(yōu)雅

語(yǔ)法非常的簡(jiǎn)短干練睹晒,沒有一點(diǎn)多余的語(yǔ)法結(jié)構(gòu)。

  • 明確

python對(duì)格式進(jìn)行強(qiáng)制的限制括细;將格式整齊劃一伪很,就感覺在寫詩(shī)一樣優(yōu)雅美麗;

  • 簡(jiǎn)單

在python的設(shè)計(jì)哲學(xué)中:要實(shí)現(xiàn)任何一件事情勒极,都應(yīng)該有一種并且我們認(rèn)為是最好的一種方式去實(shí)現(xiàn)是掰。沒有像Perl語(yǔ)言那樣花哨虑鼎,(魔法語(yǔ)言)辱匿,幾乎就是不去調(diào)試,你不知道這段代碼的邏輯炫彩。(幾乎5個(gè)Perl開發(fā)匾七,寫出一個(gè)功能,就有5種寫法出來(lái)江兢。不利于團(tuán)隊(duì)協(xié)作)

3.2.Python優(yōu)缺點(diǎn)

優(yōu)點(diǎn)
  • 簡(jiǎn)單易學(xué)

特別適合初學(xué)者學(xué)Python昨忆,不但入門容易,而且將來(lái)深入下去杉允,可以編寫那些非常非常復(fù)雜的程序邑贴。

  • 開發(fā)效率高

Python有非常強(qiáng)大的第三方庫(kù),基本上你想通過計(jì)算機(jī)實(shí)現(xiàn)任何功能叔磷,Python官方庫(kù)里都有相應(yīng)的模塊進(jìn)行支持拢驾,直接下載調(diào)用后,在基礎(chǔ)庫(kù)的基礎(chǔ)上再進(jìn)行開發(fā)改基,大大降低開發(fā)周期繁疤,避免重復(fù)造輪子。

  • 高級(jí)語(yǔ)言

當(dāng)你用Python語(yǔ)言編寫程序的時(shí)候,你無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)

  • 可移植性

由于它的開源本質(zhì)稠腊,Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過改動(dòng)使它能夠工 作在不同平臺(tái)上)躁染。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無(wú)需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行

  • 可擴(kuò)展性

如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開架忌,你可以把你的部分程序用C或C++編寫吞彤,然后在你的Python程序中使用它們。

  • 可嵌入性

你可以把Python嵌入你的C/C++程序鳖昌,從而向你的程序用戶提供腳本功能备畦。

缺點(diǎn)
  • 速度慢

Python 的運(yùn)行速度相比C語(yǔ)言確實(shí)慢很多,跟JAVA相比也要慢一些许昨,因此這也是很多所謂的大牛不屑于使用Python的主要原因懂盐,但其實(shí)這里所指的運(yùn)行速度慢在大多數(shù)情況下用戶是無(wú)法直接感知到的,必須借助測(cè)試工具才能體現(xiàn)出來(lái)糕档,比如你用C運(yùn)一個(gè)程序花了0.01s,用Python是0.1s,這樣C語(yǔ)言直接比Python快了10倍,算是非忱蚰眨夸張了,但是你是無(wú)法直接通過肉眼感知的速那,因?yàn)橐粋€(gè)正常人所能感知的時(shí)間最小單位是0.15-0.4s左右俐银,哈哈。其實(shí)在大多數(shù)情況下Python已經(jīng)完全可以滿足你對(duì)程序速度的要求端仰,除非你要寫對(duì)速度要求極高的搜索引擎等捶惜,這種情況下,當(dāng)然還是建議你用C去實(shí)現(xiàn)的荔烧。

  • 代碼不能加密

因?yàn)镻YTHON是解釋性語(yǔ)言吱七,它的源碼都是以名文形式存放的,不過我不認(rèn)為這算是一個(gè)缺點(diǎn)鹤竭,如果你的項(xiàng)目要求源代碼必須是加密的踊餐,那你一開始就不應(yīng)該用Python來(lái)去實(shí)現(xiàn)。

  • 多線程問題

這是Python被人詬病最多的一個(gè)缺點(diǎn)臀稚,GIL即全局解釋器鎖(Global Interpreter Lock)吝岭,是計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言解釋器用于同步線程的工具,使得任何時(shí)刻僅有一個(gè)線程在執(zhí)行吧寺,Python的線程是操作系統(tǒng)的原生線程窜管。在Linux上為pthread,在Windows上為Win thread稚机,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行幕帆。一個(gè)python解釋器進(jìn)程內(nèi)有一條主線程,以及多條用戶程序的執(zhí)行線程抒钱。即使在多核CPU平臺(tái)上蜓肆,由于GIL的存在颜凯,所以禁止多線程的并行執(zhí)行。

3.3.Python解釋器

當(dāng)我們編寫Python代碼時(shí)仗扬,我們得到的是一個(gè)包含Python代碼的以.py為擴(kuò)展名的文本文件症概。要運(yùn)行代碼,就需要Python解釋器去執(zhí)行.py文件早芭。
由于整個(gè)Python語(yǔ)言從規(guī)范到解釋器都是開源的彼城,所以理論上,只要水平夠高退个,任何人都可以編寫Python解釋器來(lái)執(zhí)行Python代碼(當(dāng)然難度很大)募壕。事實(shí)上,確實(shí)存在多種Python解釋器语盈。

  • CPython

當(dāng)我們從Python官方網(wǎng)站下載并安裝好Python 2.7后舱馅,我們就直接獲得了一個(gè)官方版本的解釋器:CPython。這個(gè)解釋器是用C語(yǔ)言開發(fā)的刀荒,所以叫CPython代嗤。在命令行下運(yùn)行python就是啟動(dòng)CPython解釋器。
CPython是使用最廣的Python解釋器缠借。教程的所有代碼也都在CPython下執(zhí)行干毅。

  • IPython

IPython是基于CPython之上的一個(gè)交互式解釋器,也就是說泼返,IPython只是在交互方式上有所增強(qiáng)硝逢,但是執(zhí)行Python代碼的功能和CPython是完全一樣的。好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同绅喉,但內(nèi)核其實(shí)都是調(diào)用了IE渠鸽。
CPython用>>>作為提示符,而IPython用In [序號(hào)]:作為提示符霹疫。

  • PyPy

PyPy是另一個(gè)Python解釋器拱绑,它的目標(biāo)是執(zhí)行速度综芥。PyPy采用JIT技術(shù)丽蝎,對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度膀藐。
絕大部分Python代碼都可以在PyPy下運(yùn)行屠阻,但是PyPy和CPython有一些是不同的,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會(huì)有不同的結(jié)果额各。如果你的代碼要放到PyPy下執(zhí)行国觉,就需要了解PyPy和CPython的不同點(diǎn)

  • Jython

Jython是運(yùn)行在Java平臺(tái)上的Python解釋器虾啦,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行麻诀。

  • IronPython

IronPython和Jython類似痕寓,只不過IronPython是運(yùn)行在微軟.Net平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼蝇闭。

4.Python2 or 3?

What are the differences?
In summary : Python 2.x is legacy, Python 3.x is the present and future of the language
https://wiki.python.org/moin/Python2orPython3

Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is under active development and has already seen over five years of stable releases, including version 3.3 in 2012, 3.4 in 2014, 3.5 in 2015, and 3.6 in 2016. This means that all recent standard library improvements, for example, are only available by default in Python 3.x.

Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.

Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x).

4.1.性能

Py3.0運(yùn)行 pystone benchmark的速度比Py2.5慢30%呻率。Guido認(rèn)Py3.0有極大的優(yōu)化空間,在字符串和整形操作上可以取得很好的優(yōu)化結(jié)果呻引。

  • Py3.1性能比Py2.5慢15%礼仗,還有很大的提升空間。
  • 現(xiàn)在Py3.x已經(jīng)比Py2.x運(yùn)行速度要快很多了逻悠。
4.2.編碼

Py3.x: ALL IS UNICODE NOW

4.3.語(yǔ)法
  • PRINT IS A FUNCTION

The statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old statement (PEP 3105). Examples:

2.X: print "The answer is", 2*2
3.X: print("The answer is", 2*2)
2.X: print x,                              # 使用逗號(hào)結(jié)尾禁止換行
3.X: print(x, end=" ")                     # 使用空格代替換行
2.X: print                                 # 輸出新行
3.X: print()                               # 輸出新行
2.X: print >>sys.stderr, "fatal error"
3.X: print("fatal error", file=sys.stderr)
2.X: print (x, y)                          # 輸出repr((x, y))
3.X: print((x, y))                         # 不同于print(x, y)!
4.4.Rename module
Old Name New Name
_winreg winreg
ConfigParser configparser
copy_reg copyreg
Queue queue
SocketServer socketserver
markupbase _markupbase
repr reprlib
test.test_support test.support

5.Python安裝

官方網(wǎng)站:https://www.python.org/downloads
官方文檔:https://docs.python.org/2.7/

5.1.windows

  • 默認(rèn)安裝路徑:C:\python27

  • 配置環(huán)境變量

圖片來(lái)自原創(chuàng)

5.2.Linux元践、Mac

linux mac平臺(tái)默認(rèn)就安裝python,如果版本要求達(dá)不到,需要重裝

  • 源代碼安裝
# tar -zxvf Python-2.7.13-source.tgz
# cd Python-2.7.13
# ./configure --prefix=/${PYTHON_HOME}/python2.7.13
# make 
# make install

#調(diào)整系統(tǒng)環(huán)境變量為python2.7.13
# vi /etc/profile
export PATH=/${PYTHON_HOME}/python2.7.13/bin:$PATH

6.初識(shí)Python

6.1.標(biāo)志性開篇:hello world程序

據(jù)傳說每一個(gè)程序員的第一個(gè)程序:Hello World!童谒,從此他們就走上了一條不歸路...

6.1.1.解釋器執(zhí)行
$ python
Python 2.7.10 (default, Jun  1 2017, 11:18:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello World!')
Hello World!
6.1.2.文件執(zhí)行

除了直接調(diào)用python自帶的交互器運(yùn)行代碼,单旁,還可以把程序?qū)懺谖募铮籰inux 下創(chuàng)建一個(gè)文件叫hello.py,并輸入

print("Hello World!")

然后執(zhí)行命令:python hello.py ,輸出

$ python hello_world.py 
Hello World!
指定解釋器

上一步中執(zhí)行 python hello.py 時(shí)饥伊,明確的指出 hello.py 腳本由 python 解釋器來(lái)執(zhí)行慎恒。
如果想要類似于執(zhí)行shell腳本一樣執(zhí)行python腳本,例: ./hello.py 撵渡,那么就需要在 hello.py 文件的頭部指定解釋器融柬,如下(執(zhí)行之前記得授權(quán)):

$ cat hello_world.py 
#!/bin/env python
print("Hello World!")

$ chmod +x hello_world.py 
$ ./hello_world.py 
Hello World!

如此一來(lái),執(zhí)行: ./hello.py 即可趋距。

7.開發(fā)規(guī)范

PEP8英文:http://jython.cn/dev/peps/pep-0008/
PEP8中文:https://python.freelycode.com/contribution/detail/47

7.1.編程風(fēng)格

7.1.1.縮進(jìn)統(tǒng)一
  • 抒寫代碼必須頂頭寫
  • 隸屬關(guān)系的代碼必須強(qiáng)制格式縮進(jìn)

7.1.1.1.以下代碼,是否能執(zhí)行,那個(gè)先被執(zhí)行?

$ vim indent.py 
#!/bin/env python
def main():
  print 'Hello World!'
print 'test code!'
main()

$ python indent.py
  1. 首先來(lái)說粒氧,隸屬于main()函數(shù)的代碼塊是哪個(gè)?
  2. 哪個(gè)代碼塊先被執(zhí)行?
  3. 兩個(gè)代碼塊都頂頭寫是否可以?

7.1.1.2.嘗試以下代碼是否可以?

$ vim indent.py 
#!/bin/env python
def main():
  print 'Hello World!'
    print 'test code!'
main()
7.1.2.變量規(guī)范
  • 標(biāo)識(shí)符第一個(gè)字符必須是字母(大寫或小寫)或者一個(gè)下劃線 "_"
  • 標(biāo)識(shí)符名稱的其他部分可以有字母(大寫或小寫)、下劃線"_"或數(shù)字(0-9)組成
  • 標(biāo)識(shí)符名稱是大小寫敏感的Myname和myname不是同一個(gè)標(biāo)識(shí)符
  • 有效標(biāo)識(shí)符: __my_name节腐、name23外盯、alb2_23
  • 無(wú)效標(biāo)識(shí)符:2things、this is spaced out翼雀、my-name
  • 變量名盡量要求有意義饱苟、能夠代表某些含義
  • 變量名風(fēng)格種類:task_detail、taskDetail狼渊、TaskDetail
  • 關(guān)鍵字不能聲明為變量名
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> 3name = 123
  File "<stdin>", line 1
    3name = 123
        ^
SyntaxError: invalid syntax
>>> this is = 'here!'
  File "<stdin>", line 1
    this is = 'here!'
            ^
SyntaxError: invalid syntax

以上是錯(cuò)誤的示例

8.變量賦值

計(jì)算機(jī)科學(xué)中不能完全以數(shù)學(xué)思維方式來(lái)思考問題箱熬。如變量的賦值實(shí)現(xiàn)就和自然科學(xué)中數(shù)學(xué)是不一樣的。

以下代碼中 x 和 y的結(jié)果?
$ cat evaluation.py 
#!/bin/env python

x = 123
y = x
x = 456
print 'x: ' ,x
print 'y: ' ,y
賦值分析
圖片來(lái)自原創(chuàng)
  • x = 2為例狈邑,python解釋器干了兩件事情

    1. 在內(nèi)存中創(chuàng)建了一個(gè) 2 的整數(shù)
    2. 在內(nèi)存中創(chuàng)建了一個(gè)名為x的變量城须,并把它指向2
  • 代碼執(zhí)行分析
    1.變量x賦值123,指向內(nèi)存數(shù)據(jù)123
    2.變量y賦值為x米苹,即也是同時(shí)指向內(nèi)存數(shù)據(jù)123
    3.變量x賦值456糕伐,即從新講指針指向數(shù)據(jù)456

9.字符編碼

9.1.ASCII

ASCII(American Standard Code for Information Interchange,美國(guó)標(biāo)準(zhǔn)信息交換代碼)是基于拉丁字母的一套電腦編碼系統(tǒng)蘸嘶,主要用于顯示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言良瞧,其最多只能用 8 位來(lái)表示(一個(gè)字節(jié))陪汽,即:2**8 = 256,所以褥蚯,ASCII碼最多只能表示 256 個(gè)符號(hào)掩缓。

2.x版本python解釋器在加載 .py 文件中的代碼時(shí),會(huì)對(duì)內(nèi)容進(jìn)行編碼(默認(rèn)ascill)

圖片來(lái)自網(wǎng)絡(luò)

顯然ASCII碼無(wú)法將世界上的各種文字和符號(hào)全部表示遵岩,所以你辣,就需要新出一種可以代表所有字符和符號(hào)的編碼,即:Unicode

9.2.Unicode

Unicode(統(tǒng)一碼尘执、萬(wàn)國(guó)碼舍哄、單一碼)是一種在計(jì)算機(jī)上使用的字符編碼。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的誊锭,它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼表悬,規(guī)定雖有的字符和符號(hào)最少由 16 位來(lái)表示(2個(gè)字節(jié)),即:2 **16 = 65536丧靡,
注:此處說的的是最少2個(gè)字節(jié)蟆沫,可能更多

存儲(chǔ)數(shù)據(jù)要用兩個(gè)兩個(gè)字節(jié)來(lái)表示,主要用于存儲(chǔ)中文温治、韓文等編碼格式饭庞,但由于字母本身就可以用一個(gè)字節(jié)來(lái)表示,所以都在Unicode的編碼下熬荆,對(duì)于字母型數(shù)據(jù)舟山,會(huì)造成很大的浪費(fèi)

9.3.UTF-8

UTF-8,是對(duì)Unicode編碼的壓縮和優(yōu)化卤恳,他不再使用最少使用2個(gè)字節(jié)累盗,而是將所有的字符和符號(hào)進(jìn)行分類:ascii碼中的內(nèi)容用1個(gè)字節(jié)保存、歐洲的字符用2個(gè)字節(jié)保存突琳,東亞的字符用3個(gè)字節(jié)保存...

為解決Unicode字母型數(shù)據(jù)造成浪費(fèi)的問題若债,字母用一個(gè)字節(jié)表示,中文等用三個(gè)字節(jié)表示(靈活可變的長(zhǎng)度應(yīng)對(duì)不用的類型的數(shù)據(jù))

所以拆融,python解釋器在加載 .py 文件中的代碼時(shí)蠢琳,會(huì)對(duì)內(nèi)容進(jìn)行編碼(默認(rèn)ascill),如果是如下代碼的話:

# vim hello_world.py

#!/bin/env python
print('厲害了冠息,word哥')

# python hello_world.py 
  File "hello_world.py", line 2
SyntaxError: Non-ASCII character '\xe5' in file hello_world.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

應(yīng)該顯示的告訴python解釋器挪凑,用什么編碼來(lái)執(zhí)行源代碼:

# vim hello_world.py 

#!/bin/env python
# _*_ coding:utf-8 _*_
print('厲害了孕索,word哥')

10.注釋

  • 單行注釋:

# 被注釋內(nèi)容

  • 多行注釋:

‘’‘被注釋的代碼塊’‘’
"""被注釋的代碼塊 """

11.用戶輸入

11.1.格式化打印用戶的結(jié)果

要求用戶輸入基本信息后逛艰,格式化打印

11.1.1.通過拼接+號(hào)的方法實(shí)現(xiàn)格式化打印輸出,該方法不是最佳的方案搞旭,因?yàn)槊看纹唇釉趦?nèi)存中需要開辟一塊內(nèi)存空間用于存放拼接的數(shù)據(jù)散怖,so正確的方法參考一下方法

names = raw_input('Enter your name? ')
age = str(input('Enter your age? '))
job = raw_input('Enter your job? ')
salary = raw_input('Enter your salary? ')

info =  """---Personal information of """ + names + """ ---------------
names   :""" + names + """
age     :""" + age + """
job     :""" + job + """
salary  :""" + salary

print info

11.1.2.通過占位符的方式菇绵,將格式化的結(jié)果打印。

# vim raw_input.py 
#!/bin/env python
#_*_ coding:utf-8 _*_
__author__ = "Bruce.Liu"
name = raw_input('Please input your name:')
age = raw_input('Age: ')
job = raw_input('Job: ')

print '''
Personal information of %s:
    Name: %s
    Age : %s
    Job : %s
''' % (name, name, age, job)

打印結(jié)果,驗(yàn)證

# python raw_input.py 
Please input your name:Bruce.Liu 
Age: 27
Job: IT

Personal information of Bruce.Liu:
    Name: Bruce.Liu
    Age : 27
    Job : IT

11.2.3..format方法實(shí)現(xiàn)格式化打印

print '''
---Personal information of {_name} ---------------
names   : {_name}
age     : {_age}
job     : {_job}
salary  : {_salary}
'''.format(_name=names, _age=age, _job=job, _salary=salary )

12.Module簡(jiǎn)介

Python的強(qiáng)大之處在于他有非常豐富和強(qiáng)大的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)镇眷,幾乎你想實(shí)現(xiàn)的任何功能都有相應(yīng)的Python庫(kù)支持咬最,以后的課程中會(huì)深入講解常用到的各種庫(kù),現(xiàn)在欠动,我們先來(lái)象征性的學(xué)2個(gè)簡(jiǎn)單的永乌。

12.1.Module分類

Python有大量的模塊,從而使得開發(fā)Python程序非常簡(jiǎn)潔具伍。類庫(kù)有包括三中:

  • Python內(nèi)部提供的模塊
  • 業(yè)內(nèi)開源的模塊
  • 程序員自己開發(fā)的模塊

12.2.Module實(shí)踐

12.2.1.SYS Module
  • 獲取執(zhí)行腳本的傳參
$ vim sys_module.py 
#!/bin/env python
# _*_ coding: utf-8 _*_
import sys
print(sys.argv)

$ python sys_module.py args1 
['sys_module.py', 'args1']
12.2.2.OS Module
  • 調(diào)用操作系統(tǒng)命令
$ cat os_module.py 
#!/bin/env python
# _*_ coding:utf-8 _*_
import os
os.system("df -h")
  • 結(jié)合一下
$ cat exec_cmd.py 
#!/bin/env python
# _*_ coding:utf-8 _*_
import os,sys
#print sys.argv, ''.join(sys.argv[1])
os.system(''.join(sys.argv[1:]))

$ python exec_cmd.py free
             total       used       free     shared    buffers     cached
Mem:      49374032   34720292   14653740        564     775392   27056956
-/+ buffers/cache:    6887944   42486088
Swap:      8388600       3104    8385496
12.2.3.Custom Module

默認(rèn)的Cpython解釋器翅雏,不提供tab鍵自動(dòng)補(bǔ)全功能,so Now人芽!我們加一個(gè)這種功能望几;讓我們的學(xué)習(xí)更加簡(jiǎn)單

12.2.3.1.找到python全局環(huán)境變量目錄,方便我們將來(lái)在任何一個(gè)路徑下Cpython都能識(shí)別到自定義的Module

>>> import sys
>>> sys.path
['', '/usr/local/python/lib/python2.7/site-packages/pip-9.0.1-py2.7.egg', '/usr/local/python/lib/python27.zip', '/usr/local/python/lib/python2.7', '/usr/local/python/lib/python2.7/plat-linux2', '/usr/local/python/lib/python2.7/lib-tk', '/usr/local/python/lib/python2.7/lib-old', '/usr/local/python/lib/python2.7/lib-dynload', '/usr/local/python/lib/python2.7/site-packages']

12.2.3.2.在Python默認(rèn)搜索的路徑下創(chuàng)建Module

$ cd /usr/local/python/lib/python2.7/site-packages
$ vim tab.py
#!/bin/env python

try:
  import readline

except ImportError:
  print ("Module readline not available.")
else:
  import rlcompleter
  readline.parse_and_bind("tab: complete")

12.2.3.3.導(dǎo)入該Module

$ python
Python 2.7.10 (default, Jun  1 2017, 11:18:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tab

sys.path會(huì)打印Python全局環(huán)境變量目錄,一般都放在一個(gè)叫 Python/2.7/site-packages 目錄下萤厅,這個(gè)目錄在不同的OS里放的位置不一樣橄抹,用 print(sys.path) 可以查看python環(huán)境變量列表。

13.pyc文件

pyc是一種二進(jìn)制文件惕味,是由py文件經(jīng)過編譯后楼誓,生成的文件,是一種byte code名挥,py文件變成pyc文件后慌随,加載的速度有所提高,而且pyc是一種跨平臺(tái)的字節(jié)碼躺同,是由python的虛擬機(jī)來(lái)執(zhí)行的阁猜,這個(gè)是類似于JAVA或者.NET的虛擬機(jī)的概念。pyc的內(nèi)容蹋艺,是跟python的版本相關(guān)的剃袍,不同版本編譯后的pyc文件是不同的,2.5編譯的pyc文件捎谨,2.4版本的 python是無(wú)法執(zhí)行的民效。

13.1.解釋型語(yǔ)言和編譯型語(yǔ)言

計(jì)算機(jī)是不能夠識(shí)別高級(jí)語(yǔ)言的,所以當(dāng)我們運(yùn)行一個(gè)高級(jí)語(yǔ)言程序的時(shí)候涛救,就需要一個(gè)“翻譯機(jī)”來(lái)從事把高級(jí)語(yǔ)言轉(zhuǎn)變成計(jì)算機(jī)能讀懂的機(jī)器語(yǔ)言的過程畏邢。這個(gè)過程分成兩類,第一種是編譯检吆,第二種是解釋舒萎。

編譯型語(yǔ)言在程序執(zhí)行之前,先會(huì)通過編譯器對(duì)程序執(zhí)行一個(gè)編譯的過程蹭沛,把程序轉(zhuǎn)變成機(jī)器語(yǔ)言臂寝。運(yùn)行時(shí)就不需要翻譯章鲤,而直接執(zhí)行就可以了。最典型的例子就是C語(yǔ)言咆贬。

解釋型語(yǔ)言就沒有這個(gè)編譯的過程败徊,而是在程序運(yùn)行的時(shí)候,通過解釋器對(duì)程序逐行作出解釋掏缎,然后直接運(yùn)行皱蹦,最典型的例子是Ruby。

通過以上的例子眷蜈,我們可以來(lái)總結(jié)一下解釋型語(yǔ)言和編譯型語(yǔ)言的優(yōu)缺點(diǎn)根欧,因?yàn)榫幾g型語(yǔ)言在程序運(yùn)行之前就已經(jīng)對(duì)程序做出了“翻譯”,所以在運(yùn)行時(shí)就少掉了“翻譯”的過程端蛆,所以效率比較高凤粗。但是我們也不能一概而論,一些解釋型語(yǔ)言也可以通過解釋器的優(yōu)化來(lái)在對(duì)程序做出翻譯時(shí)對(duì)整個(gè)程序做出優(yōu)化今豆,從而在效率上超過編譯型語(yǔ)言嫌拣。

此外,隨著Java等基于虛擬機(jī)的語(yǔ)言的興起呆躲,我們又不能把語(yǔ)言純粹地分成解釋型和編譯型這兩種异逐。

用Java來(lái)舉例,Java首先是通過編譯器編譯成字節(jié)碼文件插掂,然后在運(yùn)行時(shí)通過解釋器給解釋成機(jī)器文件灰瞻。所以我們說Java是一種先編譯后解釋的語(yǔ)言。

13.2.Python到底是什么

其實(shí)Python和Java/C#一樣辅甥,也是一門基于虛擬機(jī)的語(yǔ)言酝润,我們先來(lái)從表面上簡(jiǎn)單地了解一下Python程序的運(yùn)行過程吧。

當(dāng)我們?cè)诿钚兄休斎雙ython hello.py時(shí)璃弄,其實(shí)是激活了Python的“解釋器”要销,告訴“解釋器”:你要開始工作了∠目椋可是在“解釋”之前疏咐,其實(shí)執(zhí)行的第一項(xiàng)工作和Java一樣,是編譯脐供。

熟悉Java的同學(xué)可以想一下我們?cè)诿钚兄腥绾螆?zhí)行一個(gè)Java的程序:

javac hello.java
java hello

只是我們?cè)谟肊clipse之類的IDE時(shí)浑塞,將這兩部給融合成了一部而已。其實(shí)Python也一樣政己,當(dāng)我們執(zhí)行python hello.py時(shí)酌壕,他也一樣執(zhí)行了這么一個(gè)過程,所以我們應(yīng)該這樣來(lái)描述Python,Python是一門先編譯后解釋的語(yǔ)言仅孩。

13.3.簡(jiǎn)述Python執(zhí)行過程

圖片來(lái)自網(wǎng)絡(luò)

與java類似托猩,Python將.py編譯為字節(jié)碼印蓖,然后通過虛擬機(jī)執(zhí)行辽慕。編譯過程與虛擬機(jī)執(zhí)行過程均在python25.dll中。Python虛擬機(jī)比java更抽象赦肃,離底層更遠(yuǎn)溅蛉。
編譯過程不僅生成字節(jié)碼,還要包含常量他宛、變量船侧、占用棧的空間等,Pyton中編譯過程生成code對(duì)象PyCodeObject厅各。將PyCodeObject寫入二進(jìn)制文件镜撩,即.pyc。

我們?cè)谟脖P上看到的pyc自然不必多說队塘,而其實(shí)PyCodeObject則是Python編譯器真正編譯成的結(jié)果袁梗。我們先簡(jiǎn)單知道就可以了,繼續(xù)向下看憔古。

當(dāng)python程序運(yùn)行時(shí)遮怜,編譯的結(jié)果則是保存在位于內(nèi)存中的PyCodeObject中,當(dāng)Python程序運(yùn)行結(jié)束時(shí)鸿市,Python解釋器則將PyCodeObject寫回到pyc文件中锯梁。

當(dāng)python程序第二次運(yùn)行時(shí),首先程序會(huì)在硬盤中尋找pyc文件焰情,如果找到陌凳,則直接載入,否則就重復(fù)上面的過程内舟。

所以我們應(yīng)該這樣來(lái)定位PyCodeObject和pyc文件冯遂,我們說pyc文件其實(shí)是PyCodeObject的一種持久化保存方式。

14.數(shù)據(jù)類型簡(jiǎn)介

Python有五個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型:

  • Numbers(數(shù)字)
  • Bool(布爾值)
  • String(字符串)
  • List(列表)
  • Tuple(元組)
  • Dictionary(字典)

14.1.Number(數(shù)字)

數(shù)學(xué)復(fù)習(xí): http://www.guokr.com/post/432219/

Python支持四種不同的數(shù)字類型:

  • int(有符號(hào)整型)
  • long(長(zhǎng)整型[也可以代表八進(jìn)制和十六進(jìn)制])
  • float(浮點(diǎn)型)
  • complex(復(fù)數(shù))
  • bool
14.1.1.int(有符號(hào)整型)
  • x64系統(tǒng)上谒获,整數(shù)的位數(shù)為64位蛤肌,取值范圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807
>>> var1 = 1
>>> print type(var)
<type 'int'>
>>> del var
14.1.2.long(長(zhǎng)整型)
  • Python的長(zhǎng)整數(shù)沒有指定位寬批狱,即:Python沒有限制長(zhǎng)整數(shù)數(shù)值的大小裸准,但實(shí)際上由于機(jī)器內(nèi)存有限,我們使用的長(zhǎng)整數(shù)數(shù)值不可能無(wú)限大赔硫。
  • 自從Python2.2起炒俱,如果整數(shù)發(fā)生溢出,Python會(huì)自動(dòng)將整數(shù)數(shù)據(jù)轉(zhuǎn)換為長(zhǎng)整數(shù)
>>> var = 2 ** 63
>>> type(var)
<type 'long'>
14.1.3.float(浮點(diǎn)型)
圖片來(lái)自網(wǎng)絡(luò)
  • 浮點(diǎn)數(shù)用來(lái)處理實(shí)數(shù),即帶有小數(shù)的數(shù)字权悟。類似于C語(yǔ)言中的double類型砸王,占8個(gè)字節(jié)(64位),其中52位表示底峦阁,11位表示指數(shù)谦铃,剩下的一位表示符號(hào)。
>>> var2 = 3.1415926
>>> print type(var2)
<type 'float'>
14.1.4.complex(復(fù)數(shù))
  • 復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分組成榔昔,一般形式為x+yj驹闰,其中的x是復(fù)數(shù)的實(shí)數(shù)部分,y是復(fù)數(shù)的虛數(shù)部分撒会,這里的x和y都是實(shí)數(shù)嘹朗。
  • 注:Python中存在小數(shù)字池:-5 ~ 257
>>> aComplex = -8.333-1.47j
>>> aComplex.real
-8.333
>>> aComplex.imag
-1.47

14.2.Bool(布爾值)

  • 返回真或假
    數(shù)據(jù)值判斷Bool值時(shí),0為False诵肛、非0為True;像list屹培、str等數(shù)據(jù)結(jié)構(gòu)時(shí),空值表示False、有值表示Ture
>>> bool(0)
False
>>> bool(-1)
True
>>> a = [1,2,3]
>>> b = []
>>> bool(a)
True
>>> bool(b)
False

14.3.String(字符串)

python中的字符串在C語(yǔ)言中體現(xiàn)為是一個(gè)字符數(shù)組怔檩,每次創(chuàng)建字符串時(shí)候需要在內(nèi)存中開辟一塊連續(xù)的空褪秀,并且一旦需要修改字符串的話,就需要再次開辟空間珠洗,萬(wàn)惡的+號(hào)每出現(xiàn)一次就會(huì)在內(nèi)從中重新開辟一塊空間溜歪。

>>> sehai = "Hello " + "World"

盡量用一下方式:字符串格式化

  • 左側(cè)放著一個(gè)占位轉(zhuǎn)換說明符,右側(cè)放置格式化的值
  • %d:整數(shù)型
  • %f:浮點(diǎn)型
  • %s许蓖;字符型
14.3.1.字符型占位符示例
>>> name = "Bruce.Liu"
>>> print "i am is %s" % name
i am is Bruce.Liu

如果有多個(gè)轉(zhuǎn)換說明符時(shí)柳洋,必須元組的形勢(shì)存在讥邻。否則則拋異常

>>> format = "Hello. %s. %s enough for ya?"
>>> values = ('world','Hot')
>>> print format % values
Hello. world. Hot enough for ya?
14.3.2.整數(shù)型占位符示例
  • 該示例中,完全可以用%s當(dāng)做占位符心剥,但是如果輸入的值發(fā)生數(shù)學(xué)運(yùn)算時(shí)管毙,最好還是%d比較好
>>> format = '100 + 250 = %d' % 350
>>> print format
100 + 250 = 350
14.3.3.浮點(diǎn)型占位符示例

14.3.3.1.寬度和精度

>>> print 'Pi with three decimals: %10.3f' %(3.1415926)
Pi with three decimals:      3.142

14.3.3.2.對(duì)齊填充

>>> print '%010.2f' % 3.1415
0000003.14

14.3.3.3.右填充

>>> '%-10.2f' % 3.1415
'3.14      '

14.4.List(列表)

  • List(列表) 是 Python 中使用最頻繁的數(shù)據(jù)類型。
  • 列表可以完成大多數(shù)集合類的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)米酬。它支持字符沛豌,數(shù)字,字符串甚至可以包含列表(即嵌套)赃额。
>>> l_res = ['HanXiang','ShenZhen','IT']
>>> l_res[0]
'HanXiang'

14.5.Tuple(元組)

  • 元組是另一個(gè)數(shù)據(jù)類型加派,類似于List(列表)。
  • 元組用"()"標(biāo)識(shí)跳芳。內(nèi)部元素用逗號(hào)隔開芍锦。但是元組不能二次賦值,相當(dāng)于只讀列表飞盆。
>>> tuple_res = ('SQL result','...')
>>> tuple_res[0]
'SQL result'

14.6.Dictionary(字典)

  • 字典(dictionary)是除列表以外python之中最靈活的內(nèi)置數(shù)據(jù)結(jié)構(gòu)類型娄琉。列表是有序的對(duì)象結(jié)合次乓,字典是無(wú)序的對(duì)象集合。
  • 兩者之間的區(qū)別在于:字典當(dāng)中的元素是通過鍵來(lái)存取的孽水,而不是通過偏移存取票腰。
  • 字典用"{ }"標(biāo)識(shí)。字典由索引(key)和它對(duì)應(yīng)的值value組成女气。
>>> emp_info = {'name':'Bruce','job':'IT'}
>>> emp_info['name']
'Bruce'

15.作業(yè)

  • 在windows上安裝python2.7.10以上的Cpython
  • 在linux上安裝pyhton2.7.10以上的Cpyhton
  • 安裝配置好Pycharm IDE杏慰,實(shí)現(xiàn)在windows上開發(fā)完成后,代碼自動(dòng)上傳至linux服務(wù)器
  • 附錄
  1. Python前世今生
  2. 編程語(yǔ)言簡(jiǎn)介和特點(diǎn)
  3. What is Python?
  4. Python2 or 3?
  5. Python安裝
  6. 初識(shí)Python
  7. 開發(fā)規(guī)范
  8. 變量賦值
  9. 字符編碼
  10. 注釋
  11. 用戶輸入
  12. Module簡(jiǎn)介
  13. pyc文件
  14. 數(shù)據(jù)類型基礎(chǔ)
  15. 作業(yè)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末主卫,一起剝皮案震驚了整個(gè)濱河市逃默,隨后出現(xiàn)的幾起案子鹃愤,更是在濱河造成了極大的恐慌簇搅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件软吐,死亡現(xiàn)場(chǎng)離奇詭異瘩将,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凹耙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門姿现,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肖抱,你說我怎么就攤上這事备典。” “怎么了意述?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵提佣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我荤崇,道長(zhǎng)拌屏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任术荤,我火速辦了婚禮倚喂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓣戚。我一直安慰自己端圈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布子库。 她就那樣靜靜地躺著舱权,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刚照。 梳的紋絲不亂的頭發(fā)上刑巧,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天喧兄,我揣著相機(jī)與錄音,去河邊找鬼啊楚。 笑死吠冤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恭理。 我是一名探鬼主播拯辙,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼颜价!你這毒婦竟也來(lái)了涯保?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤周伦,失蹤者是張志新(化名)和其女友劉穎夕春,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體专挪,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡及志,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寨腔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片速侈。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖迫卢,靈堂內(nèi)的尸體忽然破棺而出倚搬,到底是詐尸還是另有隱情,我是刑警寧澤乾蛤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布每界,位于F島的核電站,受9級(jí)特大地震影響幻捏,放射性物質(zhì)發(fā)生泄漏盆犁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一篡九、第九天 我趴在偏房一處隱蔽的房頂上張望谐岁。 院中可真熱鬧,春花似錦榛臼、人聲如沸伊佃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)航揉。三九已至,卻和暖如春金刁,著一層夾襖步出監(jiān)牢的瞬間帅涂,已是汗流浹背议薪。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳友,地道東北人斯议。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像醇锚,于是被迫代替她去往敵國(guó)和親哼御。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容