版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
python學(xué)習(xí)教程(超級詳細(xì))目錄第1章Python編程基礎(chǔ)91.編程語言是什么102.編譯型語言和解釋型語言113.Python是什么154.Python具有哪些特點(優(yōu)點和缺點)175.學(xué)Python,不需要有編程基礎(chǔ)!226.學(xué)Python能干什么237.怎樣學(xué)習(xí)Python,才能成為Python高手?268.Python2.x和Python3.x,初學(xué)者應(yīng)如何選擇?299.Python3和Python2的區(qū)別3210.Python2to3:自動將Python2.x代碼轉(zhuǎn)換成Python3.x代碼4011.作為程序猿,怎樣才能及時了解Python的最新變化呢?4212.Python底層是用什么語言實現(xiàn)的?4413.了解JupyterNotebook,你已然超越了90%的Python程序員50第2章Python初探541.Windows安裝Python552.Linux安裝Python583.Mac安裝Python環(huán)境614.python不是內(nèi)部或外部命令的解決方法635.第一個Python程序686.Python交互式解釋器747.IDE(集成開發(fā)環(huán)境)是什么778.PythonIDE有哪些,哪款適合初學(xué)者?789.PythonIDLE使用方法(包含常用快捷鍵)8210.Python注釋8811.Python縮進(jìn)規(guī)則(包含快捷鍵)9212.Python編碼規(guī)范(PEP8)9513.Python標(biāo)識符命名規(guī)范9814.一文徹底搞懂編碼規(guī)范的重要性10115.Python關(guān)鍵字(保留字)10516.Python內(nèi)置函數(shù)106第3章變量類型和運算符1091.Python變量及其使用1092.Python數(shù)值類型(整形、浮點型和復(fù)數(shù))1133.為什么Python浮點類型存在誤差?1194.Python字符串1215.python字符串使用哪種編碼格式?1276.Pythonbytes1317.Pythonbool布爾類型1358.Pythonlen()函數(shù):獲取字符串長度或字節(jié)數(shù)1369.Pythoninput()函數(shù):獲取用戶輸入的字符串13810.Pythonprint()函數(shù)高級用法14111.Python格式化字符串14312.Python轉(zhuǎn)義字符14713.Python數(shù)據(jù)類型轉(zhuǎn)換15014.Python算術(shù)運算符15215.Python賦值運算符15816.Python位運算符16117.Python比較運算符16918.Python邏輯運算符17219.Python三目運算符17520.Python運算符優(yōu)先級178第4章列表、元組、字典和集合1801.什么是序列,Python序列詳解1802.Python列表(list)1873.Pythonlist列表添加元素1934.Pythonlist列表刪除元素1975.Pythonlist列表修改元素2006.Pythonlist常用方法2027.Pythonrange()快速初始化數(shù)字列表2098.Pythontuple元組詳解2129.Python元組和列表的區(qū)別22010.Python列表和元組的底層實現(xiàn)是怎樣的?22211.Pythondict字典22512.Pythondict字典基本操作23313.Pythondict字典方法完全攻略23614.Python使用字典格式化字符串24415.Pythonset集合24516.Pythonset集合基本操作25017.Pythonset集合方法25418.Pythonfrozenset集合26219.深入底層了解Python字典和集合,一眼看穿他們的本質(zhì)!26420.Python深拷貝和淺拷貝詳解272第5章Python字符串常用方法2791.Python字符串拼接(包含字符串拼接數(shù)字)2792.Python截取字符串2813.Pythonsplit()分割字符串方法2844.Pythonjoin()合并字符串方法287Pythoncount()方法:統(tǒng)計字符串出現(xiàn)的次數(shù)288Pythonfind()方法:檢測字符串中是否包含某子串2907.Pythonindex()方法:檢測字符串中是否包含某子串2928.Python字符串對齊方法(ljust()、rjust()和center())詳2949.Pythonstartswith()和endswith()29810.Python字符串大小寫轉(zhuǎn)換30011.Python去除字符串中空格30212.Pythonformat()格式化輸出方法30513.Pythonencode()和decode()方法30814.Pythondir()和help()幫助函數(shù)313第6章Python流程控制3161.Pythonifelse條件語句3162.Pythonifelse語句用法規(guī)范3223.Pythonif語句嵌套3284.Pythonpass3315.Pythonassert斷言3326.如何合理使用assert,千萬不要和if混用!3337.Pythonwhile循環(huán)語句3368.Pythonfor循環(huán)3409.Python循環(huán)結(jié)構(gòu)中else用法35010.Python循環(huán)嵌套35211.Pythonbreak:跳出當(dāng)前循環(huán)體35412.Pythoncontinue:直接執(zhí)行下次循環(huán)35813.教你一招,徹底告別死(無限)循環(huán)!35914.Python推導(dǎo)式,快速初始化各種序列!36115.Pythonzip函數(shù)37016.Pythonreversed函數(shù)37217.Pythonsorted函數(shù)37318.Python項目實戰(zhàn)之?dāng)?shù)字轉(zhuǎn)人民幣讀法37519.Python項目實戰(zhàn)之繞圈圈面試題37820.Python項目實戰(zhàn)之猜數(shù)字游戲(含實現(xiàn)代碼)382第7章函數(shù)和lambda表達(dá)式3841.Python函數(shù)(函數(shù)定義、函數(shù)調(diào)用)用法詳解3842.Python函數(shù)值傳遞和引用傳遞(包括形式參數(shù)和實際參數(shù))3913.Python函數(shù)參數(shù)傳遞機制3934.Python位置參數(shù)4015.Python關(guān)鍵字參數(shù)4046.Python默認(rèn)參數(shù)4067.Python函數(shù)如何傳入任意個參數(shù)?4108.Python如何用序列中元素給函數(shù)傳遞參數(shù)?4149.Pythonreturn函數(shù)返回值41710.Python函數(shù)返回多個值42011.Python函數(shù)遞歸42212.Python變量作用域(全局變量和局部變量)42313.Python如何在函數(shù)中使用同名的全局變量?42814.Python局部函數(shù)43015.Python函數(shù)高級用法43316.Python閉包43817.Pythonlambda表達(dá)式(匿名函數(shù))44018.Python函數(shù)式編程(map()、filter()和reduce())詳解44419.函數(shù)注解,號稱Python3新增的最獨特的功能!44920.如何才能提高代碼顏值,讓代碼變得有逼格?451第8章Python類和對象4551.Python面向?qū)ο?552.Pythonclass:定義類4583.Python__init__()類構(gòu)造方法4604.Python類對象的創(chuàng)建和使用4635.Pythonself4686.Python類屬性和實例屬性4727.Python實例方法、靜態(tài)方法和類方法4798.Python類調(diào)用實例方法4839.為什么說Python類是獨立的命令空間?48510.Python描述符48711.Pythonproperty()49012.Python@property49313.Python封裝49614.Python繼承機制50115.在子類中,Python到底是如何找到父類的屬性和方法的?(深度揭秘)50516.Python父類方法重寫510使用未綁定方法調(diào)用被重寫的方法51117.如何使用Python繼承機制提高開發(fā)效率?51218.Pythonsuper()51419.切記,super()只能在新式類中使用!51820.使用super(),這些“坑”千萬別踩!51921.Python__slots__限制類實例動態(tài)添加屬性和方法52322.Pythontype()函數(shù):動態(tài)創(chuàng)建類52623.PythonMetaClass元類52924.Python底層是如何實現(xiàn)MetaClass元類的?53225.Python多態(tài)53526.Python枚舉類53827.Python項目實戰(zhàn):利用面向?qū)ο笏枷雽崿F(xiàn)搜索引擎543第9章Python異常處理機制5471.什么是異常處理5482.淺談Python異常處理機制5543.Pythontryexcept5574.Pythontryexceptelse5655.Pythontryexceptfinally5696.Pythonraise5757.Pythonsys.exc_info()獲取異常信息5848.Pythontraceback5879.Python自定義異常類59110.正確使用Python異常處理機制59411.PythonIDLE調(diào)試程序59812.Pythonassert調(diào)試程序603第10章類特殊成員(屬性和方法)6051.Python__new__6052.Python__repr__6083.Python__del__6104.Python__dir__6115.Python__dict__6126.Pythonsetattr、getattr、hasattr6137.Pythonissubclass和isinstance6168.Python__call__6189.Python序列相關(guān)操作62010.Python迭代器62311.Python生成器62612.Python@函數(shù)裝飾器63513.結(jié)合實例,深入了解裝飾器!642第11章Python模塊和包6451.什么是模塊6452.Pythonimport導(dǎo)入模塊6473.Python自定義模塊6544.Python__name__=='__main__'6595.Python導(dǎo)入模塊的3種方式6616.Python導(dǎo)入模塊的本質(zhì)6727.Python__all__變量6768.Python包:存放多個模塊的文件夾6789.Python創(chuàng)建包,導(dǎo)入包68010.Python__init__.py的作用68611.Python查看模塊(變量、函數(shù)、類)方法68812.Python__doc__69013.Python__file__69214.Python第三方庫(模塊)下載和安裝693第12章Python常見模塊6961.Pythonsys6962.Pythonos7043.Pythonrandom7104.Pythontime7145.Pythonjson7216.Pythonre正則表達(dá)式模塊及其用法7357.Pythonset和frozenset7448.Pythonqueue(雙端隊列)模塊及用法7499.Pythonheapq(堆操作)75510.PythonChainMap76211.PythonCounter76612.Pythondefaultdict77113.Pythonnamedtuple77214.PythonOrderedDict77615.Pythonitertools77916.Pythonfunctools786第13章Tkinter7991.什么是GUI,PythonGUI常用庫匯總7992.PythonGUI編程組件及用法8013.PythonTkinterPack8174.PythonTkinterGrid8225.PythonTkinterPlace布局管理器及用法8256.PythonTkintercommand和bind事件處理(綁定)用法詳解8297.PythonTkinterttk組件及用法8398.PythonTkinterVariable8429.PythonTkintercompound選項使用方法84410.PythonTkinterEntry和Text控件用法(包含兩者區(qū)別)84611.PythonTkinterRadiobutton和Checkbutton控件用法85312.PythonTkinterListbox和Combobox控件用法86013.PythonTkinterSpinbox87014.PythonTkinterScale和LabeledScale87215.PythonTkinterLabelFrame87916.PythonTkinterPanedwindow88217.PythonTkinterOptionMenu88818.PythonTkinter對話框89119.PythonTkinter自定義對話框89520.PythonTkinter輸入對話框90021.PythonTkinter文件對話框90322.PythonTkinteraskcolor顏色選擇對話框用法90723.PythonTkinter消息框90924.PythonTkinterMenu菜單91525.PythontkinterCanvas畫布完全攻略92826.tkinterCanvastag_bind:指定圖形項綁定事件處理函數(shù)或方法95327.PythontkinterCanvas繪制動畫963第14章Python文件操作(I/O)9671.Python文件基本操作9682.Pythonopen()函數(shù)詳解:打開指定文件9703.以文本格式和二進(jìn)制格式打開文件,到底有什么區(qū)別?9764.Pythonread()函數(shù):按字節(jié)(字符)讀取文件9785.Pythonreadline()和readlines()函數(shù):按行讀取文件9816.Pythonwrite()和writelines():向文件中寫入數(shù)據(jù)9857.Pythonclose()函數(shù):關(guān)閉文件9888.Pythonseek和tell9909.Pythonwithas用法詳解99410.什么是上下文管理器,深入底層了解Pythonwithas語句99611.Pythonfileinput模塊:逐行讀取多個文件100112.Pythonlinecache模塊用法:隨機讀取文件指定行100413.Pythonpathlib模塊100514.Pythonos.path模塊常見函數(shù)用法(實例+詳細(xì)注釋)101715.Pythonfnmatch模塊:用于文件名的匹配101916.Pythonos模塊102117.Pythontempfile模塊:生成臨時文件和臨時目錄1030第15章Python數(shù)據(jù)庫編程10341.Python數(shù)據(jù)庫API10342.PythonSQLite創(chuàng)建數(shù)據(jù)表10403.SQLiteExpert安裝和使用10444.Pythonexecute()和executemany()10485.Pythonfetchone()、fetchmany()和fetchall()10526.Pythonexecutescript()10567.PythonSQLitecreate_function()10578.PythonSQLitecreate_aggregate()10599.PythonSQLitecreate_collation()方法:創(chuàng)建自定義比較函數(shù)106210.MySQL數(shù)據(jù)庫下載和安裝106411.Pythonpip(管理模塊工具)基礎(chǔ)用法107012.PythonMySQL數(shù)據(jù)庫執(zhí)行DDL語句107413.PythonMySQL數(shù)據(jù)庫執(zhí)行DML語句107714.PythonMySQL數(shù)據(jù)庫執(zhí)行查詢語句108115.PythonMySQLcallproc()方法:調(diào)用數(shù)據(jù)庫存儲過程108316.PythonPyMySQL模塊下載和安裝1085第16章Python并發(fā)編程10871.Python進(jìn)程和線程10872.Python創(chuàng)建線程10893.Python線程的生命周期10964.PythonThreadjoin()11035.Python守護(hù)線程11056.Pythonsleep()函數(shù)用法:線程睡眠11077.Python互斥鎖(Lock):解決多線程安全問題11088.Python線程死鎖11179.Pythoncondition實現(xiàn)線程通信112110.PythonQueue隊列實現(xiàn)線程通信112811.PythonEvent實現(xiàn)線程通信113212.Python線程池113613.PythonthreadingLocal()函數(shù)用法:返回線程局部變量114414.PythonTimer定時器:控制函數(shù)在特定時間執(zhí)行114715.Pythonschedule任務(wù)調(diào)度及其用法114916.Pythonos.fork()方法:創(chuàng)建新進(jìn)程115117.PythonProcess創(chuàng)建進(jìn)程(2種方法)詳解115318.Python設(shè)置進(jìn)程啟動的3種方式115719.多進(jìn)程編程和多線程編程的優(yōu)缺點116020.Python使用進(jìn)程池管理進(jìn)程116221.Python進(jìn)程間通信2種實現(xiàn)方法(Queue和Pipe)116522.PythonFutures并發(fā)編程116923.PythonAsyncio并發(fā)編程117624.深入底層了解PythonGIL全局解釋器鎖118225.深度解析Python垃圾回收機制1188第17章Python網(wǎng)絡(luò)編程11981.什么是計算機網(wǎng)絡(luò),TCP/IP協(xié)議和端口號11982.Python網(wǎng)絡(luò)編程模塊12043.Pythonurllib.parseurllib.parse模塊用法詳解12064.Pythonurllib.request12135.Pythonhttp.cookiejar模塊:管理cookie12226.什么是TCP協(xié)議,TCP協(xié)議和IP協(xié)議的關(guān)系12287.Pythonsocket建立TCP連接12308.Python多線程實現(xiàn)socket通信12369.Pythonsocketshutdown方法詳解124010.Pythonselectors模塊用法:實現(xiàn)非阻塞式編程124311.UDP是什么,UDP協(xié)議及優(yōu)缺點(包含和TCP協(xié)議的區(qū)別)124812.socket發(fā)送和接受數(shù)據(jù)(基于UDP協(xié)議)124913.UDP多點廣播125414.Pythonsmtplib模塊詳解:發(fā)送郵件125715.Pythonpoplib模塊:收取郵件1264第18章Python文檔和測試12701.編寫Python開發(fā)文檔的重要性12702.讀完本文,你也能編寫高大上的Python軟件開發(fā)文檔12723.Pythondocstring添加注釋12774.Pythonpydoc12795.Pythondoctest12916.Pythonunittest(PyUnit)12967.PythonTestSuite13078.PythonsetUp和tearDown13119.Pythonunittest跳過測試用例1315第19章Python打包和發(fā)布13181.Python打包的發(fā)展歷程13182.如何創(chuàng)建一個程序包?13213.如何在開發(fā)期間安裝測試Python程序包?13354.Python命名空間包13375.如何向PyPI上傳Python程序包?13436.Python源碼包和二進(jìn)制包13467.Pythonzipapp打包13528.PythonPyInstaller13589.怎樣阻止別人反編譯我們的程序包?1365第20章Python數(shù)據(jù)可視化13671.PythonMatplotlib安裝13672.PythonMatplotlibplot13693.PythonMatplotliblegend13744.PythonMatplotlibtime、xlabel、ylabel、xticks、yticks13795.PythonMatplotlibsubplot13846.PythonMatplotlibpie13927.PythonMatplotlib繪制柱狀圖(bar和barh函數(shù))13948.PythonMatplotlibscatter14029.PythonMatplotlibcontour和contourf140510.Pythonplot_surface140811.PythonPygal141012.PythonPygal常見數(shù)據(jù)圖141913.Python讀取csv文件143714.Python讀取JSON文件144415.Python讀取網(wǎng)絡(luò)數(shù)據(jù)1451第21章PythonScrapy網(wǎng)絡(luò)爬蟲14571.網(wǎng)絡(luò)爬蟲是什么14572.PythonScrapy安裝14593.PythonScrapy項目創(chuàng)建14634.PythonScrapyshell14675.PythonScrapy爬蟲項目開發(fā)過程14746.Pythonscrapy爬蟲數(shù)據(jù)保存到MySQL數(shù)據(jù)庫14857.PythonScrapy突破反爬蟲機制14878.PythonScrapy反爬蟲解決方案14969.PythonScrapy整合Selenium1500第1章Python編程基礎(chǔ)伴隨著大數(shù)據(jù)和人工智能的興起,Python這門“古老”的語言重新煥發(fā)出耀眼的光彩。實際上Python一直是一門優(yōu)秀的編程語言,不僅簡潔、易用,而且功能強大,它能做到的事情太多了,既可用于開發(fā)桌面應(yīng)用,也可用于做網(wǎng)絡(luò)編程,還可用于開發(fā)Web應(yīng)用……可能正因為它能做到的方面太多,反而顯得沒有特別突出的一面。另外,由于Python非常簡單,很多非專業(yè)人士都可使用Python,這可能導(dǎo)致一些專業(yè)程序員對Python抱有偏見?,F(xiàn)在情況發(fā)生了改變,Python在大數(shù)據(jù)和人工智能兩個領(lǐng)域大放異彩,使得Python語言變得非常流行(目前Python排在商用語言排行榜的第4位)。本教程將會向讀者詳細(xì)介紹Python這門優(yōu)秀的編程語言。本章重點介紹如何搭建Python的開發(fā)環(huán)境。1.編程語言是什么其實,程序指的就是一系列指令,用來告訴計算機做什么,而編寫程序的關(guān)鍵在于,我們需要用計算機可以理解的語言來提供這些指令。雖然借助Siri(Apple)、GoogleNow\h(\hAndroid\h)、Cortana(Microsoft)等技術(shù),我們可以使用漢語直接告訴計算機做什么,比如“Siri,打開酷狗音樂”,但使用過這些系統(tǒng)的讀者都知道,它尚未完全成熟,再加上我們語言充滿了模糊和不精確因素,使得設(shè)計一個完全理解人類語言的計算機程序,仍然是一個有待解決的問題。為了有效避開所有影響給計算機傳遞指令的因素,計算機科學(xué)家設(shè)計了一些符號,這些符號各有其含義,且之間無二義性,通常被它們?yōu)榫幊陶Z言。編程語言中的每個結(jié)構(gòu),都有固定的使用格式(稱為語法)以及精確的含義(稱為語義)。換句話說,編程語言指定了成套的規(guī)則,用來編寫計算機可以理解的指令。習(xí)慣上,我們將這一條條指令稱為計算機代碼,而用編程語言來編寫算法的過程稱為編碼。本教程要講解的\h\hPython\h就是一種編程語言,除此之外,你肯定也聽說過其他一些編程語言,如C\h、\hC++\h、\hJava\h、Ruby等。至今,計算機科學(xué)家已經(jīng)開發(fā)了成千上萬種編程語言,且隨著時間演變,這些編程語言又產(chǎn)生了多個不同的版本。但無論是哪個編程語言,也無論有多少個版本,雖然它們在細(xì)節(jié)上可能有所不同,無疑它們都有著固定的、無二義性的語法和語義。以上提到的編程語言,都是高級計算機語言,設(shè)計它們的目的是為了方便程序員理解和使用。但嚴(yán)格來說,計算機硬件只能理解一種非常低級的編程語言,稱為機器語言。比如說,讓計算機對2個數(shù)做求和操作,那么CPU可能要執(zhí)行以下指令:將位于內(nèi)存空間位置在2001的數(shù)加載到CPU中;再將位于內(nèi)存空間位置在2002的數(shù)也加載到CPU中;在CPU中,對這2個數(shù)做求和操作;將結(jié)果存儲在位置為2003的內(nèi)存空間。可以看到,對2個數(shù)執(zhí)行求和操作需要做這么多工作,且這還只是籠統(tǒng)地描述,實際會更加復(fù)雜。而使用Python這樣的高級語言,對2個數(shù)求和可以很自然地用c=a+b表示,但由此帶來的問題是,我們需要設(shè)計一種方法,將高級語言翻譯成計算機可以執(zhí)行的機器語言,有兩種方法可以實現(xiàn),分別是使用編譯器和解釋器。使用編譯器將自身等效轉(zhuǎn)換成機器語言的高級語言,通常稱為編譯型語言;而使用解釋器將自身轉(zhuǎn)換成機器語言的高級語言,稱為解釋型語言,Python就是解釋型編程語言的一種。關(guān)于編譯型語言和解釋型語言的含義和區(qū)別,后續(xù)章節(jié)會進(jìn)行詳細(xì)介紹。2.編譯型語言和解釋型語言\hPython\h是一門解釋型的編程語言,因此它具有解釋型語言的運行機制。計算機程序,其實就是一組計算機指令的集合,能真正驅(qū)動機器運行的是機器指令,但讓普通開發(fā)者直接編寫機器指令是不現(xiàn)實的,因此就出現(xiàn)了計算機高級語言。高級語言允許使用自然語言(通常就是英語)來編程,但高級語言的程序最終必須被翻譯成機器指令來執(zhí)行。高級語言按照程序的執(zhí)行方式,可以分為編譯型和解釋型兩種。編譯型語言編譯型語言是指使用專門的編譯器,針對特定平臺(操作系統(tǒng))將某種高級語言源代碼,一次性“翻譯”成可被該平臺硬件執(zhí)行的機器語言(包括機器指令和操作數(shù)),并包裝成該平臺所能識別的可執(zhí)行程序的格式,這個轉(zhuǎn)換過程稱為編譯(Compile)。編譯生成的可執(zhí)行程序可以脫離開發(fā)環(huán)境,在特定的平臺上獨立運行。編譯器,可以理解為就是一個比較復(fù)雜的計算機程序,它可以接受一個以高級語言編寫的程序,并將其翻譯成以某個計算機的機器語言表達(dá)的等效程序。有些程序編譯結(jié)束后,還可能需要對其他編譯好的目標(biāo)代碼進(jìn)行鏈接,即組裝兩個以上的目標(biāo)代碼模塊生成最終的可執(zhí)行程序,通過這種方式實現(xiàn)低層次的代碼復(fù)用。因為編譯型語言是一次性編譯成機器語言的,所以可以脫離開發(fā)環(huán)境獨立運行,而且通常運行效率較高。但因為編譯型語言的程序被編譯成特定平臺上的機器碼,因此編譯生成的可執(zhí)行程序通常無法移植到其他平臺上運行,如果需要移植,則必須將源代碼復(fù)制到特定平臺上,針對特定平臺進(jìn)行修改,至少需要采用特定平臺上的編譯器重新編譯?,F(xiàn)有的C\h、\hC++\h、Objective-C、Pascal等高級語言都屬于編譯型語言。半編譯型語言此外,還有一種偽編譯型語言,如VisualBasic,它屬于半編譯型語言,并不是真正的編譯型語言。它首先被編譯成P-code代碼(中間代碼),并將解釋引擎封裝在可執(zhí)行程序內(nèi),當(dāng)運行程序時,P-code代碼才會被解析成真正的二進(jìn)制代碼。從表面上看,VisualBasic可以編譯生成可執(zhí)行的EXE文件,而且這個EXE文件也可以脫離開發(fā)環(huán)境,在特定平臺上運行,非常像編譯型語言。實際上,在這個EXE文件中,既有程序的啟動代碼,也有鏈接解釋程序的代碼,而這部分代碼負(fù)責(zé)啟動VisualBasic解釋程序,再對VisualBasic代碼進(jìn)行解釋井執(zhí)行。解釋型語言解釋型語言是指使用專門的解釋器,將源程序逐行解釋成特定平臺的機器代碼并立即執(zhí)行的語言。解釋型語言通常不會進(jìn)行整體性的編譯和鏈接處理,解釋型語言相當(dāng)于把編譯型語言中的編譯和解釋過程混合到一起同時完成??梢赃@樣認(rèn)為,每次執(zhí)行解釋型語言的程序都需要進(jìn)行一次編譯,因此解釋型語言的程序運行效率通常較低,而且不能脫離解釋器獨立運行。但解釋型語言有一個優(yōu)勢,就是跨平臺比較容易,只需提供特定平臺的解釋器即可,每個特定平臺上的解釋器都負(fù)責(zé)將源程序解釋成特定平臺的機器指令。也就是說,解釋型語言可以方便地實現(xiàn)源程序級的移植,但這是以犧牲程序執(zhí)行效率為代價的。編譯型語言PK解釋型語言編譯型語言和解釋型語言的對比如圖1所示。圖1編譯型語言和解釋型語言借助圖1不難理解,編譯型語言和解釋型語言的區(qū)別在于,編譯是對高級語言程序進(jìn)行一次性翻譯,這樣的好處是,一旦源程序被徹底翻譯,它就可以重復(fù)運行,且今后都不再需要編譯器和源代碼;而如果使用解釋器,則高級語言程序每次運行,都需要借助源程序和解釋器,其最大的好處就是,程序有很好的可移植性。本教程所講的Python語言,屬于解釋型語言,因此運行Python程序時需要使用特定的解釋器進(jìn)行解釋、執(zhí)行。解釋型的Python語言天生具有跨平臺的能力,只要為Python提供相應(yīng)平臺的解釋器即可。3.Python是什么前面提到,編程語言有“高低”之分,而高級語言又有諸多版本,比如C\h、\hC++\h、\hJava\h等,\h「\hPython\h」也是其中之一。Python語言算得上一門“古老”的編程語言,其流行這么久,必然有它的獨到之處,本節(jié)我們簡單介紹Python的相關(guān)情況。Python,本義是指“蟒蛇”。1989年,荷蘭人GuidovanRossum(后續(xù)簡稱Guido)為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的腳本解釋程序,于是便誕生了一種面向?qū)ο蟮慕忉屝透呒壘幊陶Z言,被命名為Python,其標(biāo)記如圖1所示。圖1Python的標(biāo)志有人說,之所以Guido會選擇Python作為該編程語言的名字,是因為他是一個叫MontyPython戲劇團(tuán)體的忠實粉絲。Python語言是基于ABC教學(xué)語言的,而ABC這種語言非常強大,是專門為非專業(yè)程序員設(shè)計的。但ABC語言并沒有獲得廣泛的應(yīng)用,Guido認(rèn)為是非開放造成的。ABC是一種交互式、結(jié)構(gòu)化的高級語言,旨在替代BASIC、Pascal等語言,用于教學(xué)以及原型軟件設(shè)計。值得一提的是,Python創(chuàng)始人Guido曾在ABC系統(tǒng)開發(fā)中工作了數(shù)年。Guido在Python中避免了ABC不夠開放的劣勢,加強了Python和其他語言如C、C++和Java的結(jié)合性,令其具有豐富而強大的庫,能夠把使用其他語言制作的各種模塊(尤其是C和C++)很輕松地聯(lián)結(jié)在一起,因此Python又常被稱為“膠水”語言。這里的模塊,可以簡單理解為一個個可實現(xiàn)各種不同功能的方法(也可稱為函數(shù))。Python的設(shè)計哲學(xué)為優(yōu)雅、明確、簡單,實際上,Python始終貫徹著這一理念,以至于如今網(wǎng)絡(luò)上流傳著“人生苦短,我用Python”的說法。Python上手非常簡單,它的語法非常像自然語言,對非軟件專業(yè)人士而言,選擇Python的成本最低,因此某些醫(yī)學(xué)甚至藝術(shù)專業(yè)背景的人,往往會選擇Python作為編程語言。正是由于Python所具有的這些特性,使得其自1991年P(guān)ython第一個公開發(fā)行版問世后,自2004年起Python的使用率呈線性增長,不斷受到編程者的歡迎和喜愛;2010年,Python榮膺TIOBE2010年度語言桂冠;2017年,IEEESpectrum發(fā)布的2017年度編程語言排行榜中,Python位居第1位。直至現(xiàn)在(2019年6月份),根據(jù)TIOBE排行榜的顯示,Python也居于第3位,且有繼續(xù)提升的態(tài)勢(如表2所示)。表2TIOBE2019年6月份編程語言排行榜(前10名)Jun2019Jun2018ChangeProgrammingLanguageRatings11Java15.004%22C13.300%34Python8.530%43C++7.384%56VisualBasic.NET4.624%65\hC#\h4.483%78\hJavaScript\h2.716%87PHP2.567%99SQL2.224%1016Assemblylanguage1.479%4.Python具有哪些特點(優(yōu)點和缺點)我們已經(jīng)不止一次講過,\hPython\h是一種面向?qū)ο蟆⒔忉屝偷哪_本語言,同時也是一種功能強大而完善的通用型語言。相比其他編程語言(比如\h\hJava\h),Python代碼非常簡單,上手非常容易。舉個簡單的例子,比如要完成某個功能,如果用Java需要100行代碼,但用Python可能只需要20行代碼,這是Python具有巨大吸引力的一大特點。不僅如此,Python還有其他的特點,下面就給大家做一下總結(jié)。Python特點:簡單易學(xué)Python是一種代表簡單注意思想的語言,閱讀一個良好的Python程序,即使是在Python語法要求非常嚴(yán)格的大環(huán)境下,給人的感覺也像是在讀英語段落一樣。換句話說,Python編程語言最大的優(yōu)點之一,是其具有偽代碼的特質(zhì),它可以讓我們在開發(fā)Python程序時,專注于解決問題,而不是搞明白語言本身。Python特點:開源Python是FLOSS(自由/開源源碼軟件)之一,簡單地理解就是,用戶使用Python進(jìn)行開發(fā)和發(fā)布自己編寫的程序,不需要支付任何費用,也不用擔(dān)心版權(quán)問題,即使作為商業(yè)用途,Python也是免費的。開源正在成為軟件行業(yè)的一種發(fā)展趨勢,現(xiàn)在有很多商業(yè)軟件公司都開始將自己的產(chǎn)品變成開源的(例如Java)。也許,Python的開源正是它如此優(yōu)秀的原因之一,因為會有這么一群人,他們希望看到一個更加優(yōu)秀的Python,從而為了這個目標(biāo),不斷地對Python進(jìn)行創(chuàng)造,不斷地改進(jìn)。Python特點:高級語言Python是高級語言,因此當(dāng)使用Python語言編寫程序時,我們無需再考慮一些底層細(xì)節(jié)方面的問題。例如,如何管理程序使用的內(nèi)存等等。Python特點:解釋型語言一個用編譯型語言(如C或\h\hC++\h)寫的程序,可以從源文件轉(zhuǎn)換到一個計算機使用的語言。這個過程主要通過編譯器完成。當(dāng)運行程序的時候,我們可以把程序從硬盤復(fù)制到內(nèi)存中并且運行。而Python語言寫的程序,則不需要編譯成二進(jìn)制代碼,可以直接從源代碼運行程序。在計算機內(nèi)部,由Python解釋器把源代碼轉(zhuǎn)換成字節(jié)碼的中間形式,然后再把它翻譯成計算機使用的機器語言并運行。事實上,由于不再擔(dān)心如何編譯程序,使得使用Python變得更加簡單,我們只需要將Python程序復(fù)制到另外一臺計算機上,它就可以工作了。因此,Python程序更加易于移植。Python特點:可移植性由于Python是開源的,它已經(jīng)被移植到許多平臺上。如果能夠避免使用依賴系統(tǒng)的特性,那就意味著,所有Python程序都無需修改就可以在好多平臺上運行,包括\h\hLinux\h、Windows、FreeBSD、Solaris等等,甚至還有PocketPC、Symbian以及Google基于Linux開發(fā)的\h\hAndroid\h平臺。解釋型語言幾乎天生就是跨平臺的。Python作為一門解釋型的語言,它天生具有跨平臺的特征,只要為平臺提供了相應(yīng)的Python解釋器,Python就可以在該平臺上運行。Python特點:面向?qū)ο驪ython既支持面向過程編程,也支持面向?qū)ο缶幊?。在“面向過程”的語言中(如C語言),程序僅僅是由可重用代碼的函數(shù)構(gòu)建起來的;而在“面向?qū)ο蟆钡恼Z言(如C++)中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。與其他編程語言(如C++和Java)相比,Python是以一種非常強大,而又簡單的方式實現(xiàn)的面向?qū)ο缶幊?。Python特點:強大的功能Python強大的功能也許才是很多用戶支持Python的最重要的原因,從字符串處理到復(fù)雜的3D圖形編程,Python借助擴展模塊都可以輕松完成。實際上,Python的核心模塊已經(jīng)提供了足夠強大的功能,使用Python精心設(shè)計的內(nèi)置對象可以完成許多功能強大的操作。此外,Python的社區(qū)也很發(fā)達(dá),即使一些小眾的應(yīng)用場景,Python往往也有對應(yīng)的開源模塊來提供解決方案。Python特點:可擴展性Python的可擴展性體現(xiàn)為它的模塊,Python具有腳本語言中最豐富和強大的類庫,這些類庫覆蓋了文件I/O、GUI、網(wǎng)絡(luò)編程、數(shù)據(jù)庫訪問、文本操作等絕大部分應(yīng)用場景。Python可擴展性一個最好的體現(xiàn)是,當(dāng)我們需要一段關(guān)鍵代碼運行的更快時,可以將其用C或C++語言編寫,然后在Python程序中使用它們即可。除了以上幾個特點(也可稱之為優(yōu)點)之外,作為一個解釋型語言,Python自然也有一些弱點,比如:速度慢:Python程序比Java、C、C++等程序的運行效率都要慢。源代碼加密困難:不像編譯型語言的源程序會被編譯成目標(biāo)程序,Python直接運行源程序,因此對源代碼加密比較困難。其實,這兩個缺點并不是什么大問題,首先,由于目前計算機的硬件速度越來越快,軟件工程往往更關(guān)注開發(fā)過程的效率和可靠性,而不是軟件的運行效率;至于第二個問題就更不是問題了,現(xiàn)在軟件行業(yè)的大勢本就是開源,就像Java程序同樣很容易反編譯,但絲毫不會影響它的流行。5.學(xué)Python,不需要有編程基礎(chǔ)!“編程零基礎(chǔ),可以學(xué)習(xí)\h\hPython\h嗎”,這是很多初學(xué)者經(jīng)常問我的一個問題。當(dāng)然,在計算機方面的基礎(chǔ)越好,對學(xué)習(xí)任何一門新的編程語言越有利。但如果你在編程語言的學(xué)習(xí)上屬于零基礎(chǔ),也不用擔(dān)心,因為無論用哪門語言作為學(xué)習(xí)編程的入門語言,總是要有一個開始。就我個人的觀點,Python作為學(xué)習(xí)編程的入門語言是再合適不過的。凡是在大學(xué)計算機專業(yè)學(xué)習(xí)過C語言的同學(xué)都感同身受,認(rèn)為C語言不是很好的入門語言,很多曾經(jīng)立志學(xué)習(xí)編程的讀者,在學(xué)習(xí)了C語言之后,就決心不再學(xué)習(xí)編程。因此,是否學(xué)會C語言,好像成為了進(jìn)入編程行業(yè)的篩選標(biāo)準(zhǔn)。但是,如果將Python作為編程入門語言,就不會出現(xiàn)類似C語言的那些窘境問題。目前,逐漸有高校開始使用Python作為軟件專業(yè)大學(xué)生(甚至也包含非軟件專業(yè))的入門編程語言。本教程始終貫徹的思想就是,零基礎(chǔ)也能學(xué)Python,教程的目標(biāo)就是和初學(xué)者一起,從零基礎(chǔ)開始學(xué)習(xí)Python。因此,編程零基礎(chǔ)的你,無需猶豫,盡管放膽來學(xué)。除此之外,很多初學(xué)者還面臨這樣一個問題,那就是教程已經(jīng)學(xué)完啦,教程中的代碼也都已經(jīng)親自編寫并運行通過了,但還是不知道如何開發(fā)一個真正的應(yīng)用程序,面對問題還是不知道如何下手解決。如果你深有同感,只能說明你缺乏練習(xí),代碼編輯量太少。從編程零基礎(chǔ)到專業(yè)程序員的過程,除了學(xué)習(xí)更多的基礎(chǔ)知識,更要刻意地去培養(yǎng)自己的編程思維,這沒有捷徑,只有靠不斷積累自己的代碼量。當(dāng)然,增加代碼量并不是要我們?nèi)ッつ康鼐帉懘a,如果找不到增加代碼量的方向,可以從閱讀別人的代碼開始。需要注意的是,在閱讀他人編寫的代碼時,要邊閱讀邊思考,多問幾個為什么,例如代碼為什么要這么寫,有什么意圖,有沒有更簡單的方法可以實現(xiàn)等等,必要情況下還可以給代碼進(jìn)行必要的注釋。不僅如此,在完全理解他人代碼的前提下,還可以試圖對代碼做修改,實現(xiàn)一些自己的想法。做到這些,才能說明你將別人的代碼消化吸收了。初學(xué)者在寫代碼或者調(diào)試代碼的過程中,肯定會遇到很多問題,怎么辦呢?最好的方法就是借助網(wǎng)絡(luò)尋找答案,看看類似的問題別人是如何解決的,千萬不要總是局限在自己的思維范圍中。在這里,給大家推薦一個專門針對編程答疑解惑的網(wǎng)站\h\hStack\h\hOverFlow\h。6.學(xué)Python能干什么\hPython\h作為一種功能強大的編程語言,因其簡單易學(xué)而受到很多開發(fā)者的青睞。那么,Python的應(yīng)用領(lǐng)域有哪些呢?概括起來,Python的應(yīng)用領(lǐng)域主要有如下幾個。Web應(yīng)用開發(fā)Python經(jīng)常被用于Web開發(fā)。例如,通過mod_wsgi模塊,Apache可以運行用Python編寫的Web程序。Python定義了WSGI標(biāo)準(zhǔn)應(yīng)用接口來協(xié)調(diào)HTTP服務(wù)器與基于Python的Web程序之間的通信。不僅如此,一些Web框架(如Django、TurboGears、web2py等等)可以讓程序員輕松地開發(fā)和管理復(fù)雜的Web程序。舉個最直觀的例子,全球最大的搜索引擎Google,在其網(wǎng)絡(luò)搜索系統(tǒng)中就廣泛使用Python語言。另外,我們經(jīng)常訪問的集電影、讀書、音樂于一體的豆瓣網(wǎng)(如圖1所示),也是使用Python實現(xiàn)的。圖1用Python實現(xiàn)的豆瓣網(wǎng)操作系統(tǒng)管理、自動化運維開發(fā)很多操作系統(tǒng)中,Python是標(biāo)準(zhǔn)的系統(tǒng)組件,大多數(shù)\h\hLinux\h發(fā)行版以及NetBSD、OpenBSD和MacOSX都集成了Python,可以在終端下直接運行Python。有一些Linux發(fā)行版的安裝器使用Python語言編寫,例如Ubuntu的Ubiquity安裝器、RedHatLinux和Fedora的Anaconda安裝器等等。另外,Python標(biāo)準(zhǔn)庫中包含了多個可用來調(diào)用操作系統(tǒng)功能的庫。例如,通過pywin32這個軟件包,我們能訪問Windows的COM服務(wù)以及其他WindowsAPI;使用IronPython,我們能夠直接調(diào)用.NetFramework。通常情況下,Python編寫的系統(tǒng)管理腳本,無論是可讀性,還是性能、代碼重用度以及擴展性方面,都優(yōu)于普通的shell腳本。游戲開發(fā)很多游戲使用\h\hC++\h編寫圖形顯示等高性能模塊,而使用Python或Lua編寫游戲的邏輯。和Python相比,Lua的功能更簡單,體積更??;而Python則支持更多的特性和數(shù)據(jù)類型。比如說,國際上指明的游戲SidMeier'sCivilization(文明,如圖2所示)就是使用Python實現(xiàn)的。圖2Python開發(fā)的游戲編寫服務(wù)器軟件Python對于各種網(wǎng)絡(luò)協(xié)議的支持很完善,所以經(jīng)常被用于編寫服務(wù)器軟件以及網(wǎng)絡(luò)爬蟲。比如說,Python的第三方庫Twisted,它支持異步網(wǎng)絡(luò)編程和多數(shù)標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議(包含客戶端和服務(wù)器端),并且提供了多種工具,因此被廣泛用于編寫高性能的服務(wù)器軟件??茖W(xué)計算NumPy、SciPy、Matplotlib可以讓Python程序員編寫科學(xué)計算程序。以上都只是Python應(yīng)用領(lǐng)域的冰山一角,總的來說,Python語言不僅可以應(yīng)用到網(wǎng)絡(luò)編程、游戲開發(fā)等領(lǐng)域,還可以在圖形圖像處理、只能機器人、爬取數(shù)據(jù)、自動化運維等多方面展露頭角,為開發(fā)者提供簡約、優(yōu)雅的編程體驗。7.怎樣學(xué)習(xí)Python,才能成為Python高手?在學(xué)習(xí)過程中,很多小伙伴經(jīng)常抱怨,計算機編程語言種類太多,根本學(xué)不過來,可能用了\h\hJava\h很多年,突然最近的項目需要用\h\hPython\h,就感到不知所措,壓力山大。再舉個例子,F(xiàn)acebook的主流語言是Hack(PHP的進(jìn)化版本),但對于剛剛?cè)肼毜墓こ處煻裕?00個里至少有95個之前根本沒有用過Hack或者PHP。不過,這些人上手都特別快,基本上只需要1~2周,日常編程就變得毫無壓力。那么,他們是怎么做到的呢?編程語言都是相通的首先,如果你具有一定的編程基礎(chǔ),接觸一門新的編程語言時會發(fā)現(xiàn),不同的編程語言之間其實是相通的,因為編程語言本就是人類控制計算機的一系列指令,即便是不同的編程語言,它們在語法規(guī)則方面也大同小異。因此,在原有編程基礎(chǔ)上再學(xué)習(xí)一門新的編程語言,并沒有那么難。學(xué)習(xí)過程中,首先要做到的就是明確區(qū)別。例如,學(xué)習(xí)Python的條件和循環(huán)語句時,可以比對C語言或者\h\hC++\h語言的語法是怎樣的;學(xué)習(xí)Python中的字符串相加時,可以對比Java語言中字符串相加的語法。除了能夠明確區(qū)分各編程語言的不同點,還要能將它們聯(lián)系起來靈活運用。比如說,Python語言的優(yōu)勢是擅長數(shù)據(jù)分析,因此它廣泛應(yīng)用于人工智能(AI)、機器學(xué)習(xí)等領(lǐng)域(例如機器學(xué)習(xí)用到的\h\hTensorFlow\h框架就是用Python寫的),但是涉及到底層的矩陣運算等操作時,就需要依賴C++語言,因為它的速度快,運行效率更高。事實上,很多公司都是根據(jù)不同的需求選擇不同的編程語言進(jìn)行開發(fā)。畢竟,哪怕只是幾十到幾百毫秒的速度差距,對用戶體驗來說都是決定性的。Python對初學(xué)者很友好如果Python是你接觸的第一門編程語言,那也不必?fù)?dān)心。我們知道,雖然同為人機交互的橋梁,但Python比C++、Java等,語言更簡潔,也更接近英語,對初學(xué)者很友好,這也是Python語言的一個顯著特點。對于初學(xué)者來說,要做的就是專注于Python這一門語言,明確學(xué)習(xí)的重點,把握好學(xué)習(xí)節(jié)奏,由淺入深循序漸進(jìn)地學(xué)習(xí)。根據(jù)本人多年的學(xué)習(xí)工作經(jīng)驗,把編程語言的學(xué)習(xí)分為以下3步,無論你是否有編程基礎(chǔ),都可以對照著來做。1)多實踐,積累代碼量任何一門編程語言,其囊括的知識面都是非常廣泛的,從基本的變量賦值、條件循環(huán)、到文件操作、并發(fā)編程等,千萬不要等到把所有知識點都學(xué)完了才開始練習(xí),因為到那時你會發(fā)現(xiàn),前面好不容易記住的知識都忘記了。學(xué)習(xí)編程,是十分講究實戰(zhàn)的,沒有捷徑可走,越早練習(xí),練得越多越勤,學(xué)習(xí)效果就越好。時刻注意代碼規(guī)范學(xué)習(xí)編程語言,在追求快和高效的同時,每一種編程語言都有必要的編碼規(guī)范,一定不能忽略。要想成為一名優(yōu)秀的程序員,從起步階段就要刻意地去培養(yǎng)自己的編程規(guī)范。例如,在剛開始編寫代碼時,不要將原本多行的代碼全部寫到一行,也不要隨便用a、b、c等字母作為變量的名稱。開發(fā)經(jīng)驗是必不可少的要想真正熟練地掌握Python(或者其它編程語言),擁有大中型產(chǎn)品的開發(fā)經(jīng)驗是必不可少的,它會讓你站得更高,望得更遠(yuǎn)。例如,我們幾乎每天都會用搜索引擎,但你了解一個搜索引擎的服務(wù)器端實現(xiàn)嗎?這是一個典型的面向?qū)ο笤O(shè)計,需要定義一系列相關(guān)的類和函數(shù),還要從產(chǎn)品需求、代碼復(fù)雜度、效率以及可讀性等多個方面綜合考量,同時在上線后還要進(jìn)行各種優(yōu)化等。本教程中無法讓你完成一個上億用戶級產(chǎn)品的實踐,但設(shè)置有一些小項目,可以幫你掌握必要的開發(fā)知識。最后,這里為你準(zhǔn)備了一章Python學(xué)習(xí)的知識圖譜,涵蓋了Python的核心知識,其中的大部分內(nèi)容本教程都會做詳細(xì)講解。Python知識體系框架(\h點擊查看高清大圖\h)8.Python2.x和Python3.x,初學(xué)者應(yīng)如何選擇?\hPython\h自發(fā)布以來,主要有3個版本,分別是:1994年發(fā)布的Python1.0版本(已過時);2000年發(fā)布的Python2.0版本,截止到2019年3月份,已經(jīng)更新到2.7.16;2008年發(fā)布的Python3.0版本,截止到2019年3月份,已經(jīng)更新到3.7.3;3個版本中,Python3.0是一次重大的升級,為了避免引入歷史包袱,Python3.0沒有考慮與Python2.x的兼容,這也就導(dǎo)致很長時間以來,Python2.x的用戶不愿意升級到Python3.0。除此之外,造成目前這種狀況的另一個原因是,將現(xiàn)有應(yīng)用從Python2.x遷移到Python3.x是一項不小的挑戰(zhàn)。雖然有2to3(后續(xù)會介紹)之類的工具可以進(jìn)行代碼的自動轉(zhuǎn)換,但無法保證轉(zhuǎn)換后的代碼100%正確。而且,如果不做人工修改的話,轉(zhuǎn)換后的代碼性能可能還不如轉(zhuǎn)換前。因此,將現(xiàn)有的復(fù)雜代碼庫遷移到Python3.x上可能需要付出巨大的經(jīng)歷和成本,某些公司無法負(fù)擔(dān)這些成本。目前,根據(jù)統(tǒng)計顯示,使用Python2.x的開發(fā)者仍占63.7%,而Python3.x的用戶占36.3%,由此可見,使用Python2.x的用戶還是占多數(shù)。在2014年,Python創(chuàng)始人宣布,將Python2.7支持時間延長到2020。那么,初學(xué)者應(yīng)該選擇什么版本呢?本教程建議大家選擇Python3.x版本,理由有以下幾點: 使用Python3.x已經(jīng)是大勢所趨目前,雖然使用Python2.x的開發(fā)者居多,但使用Python3.x的開發(fā)者正在迅速增加,如圖1所示:圖1Python3.x是大勢所趨另外,根據(jù)PEP-404這份文檔,Python2.x版本將不會再發(fā)布2.8版本,且未來非常重要的項目(如Django、Flask和Numpy)可能都將放棄對2.x的支持,僅支持Python3.x。因此,從長遠(yuǎn)來看,學(xué)習(xí)Python3.x只有好處。本教程也是以Python3.x來介紹Python編程,因此,為了同步,強烈建議初學(xué)者選擇Python3.x。Python3.x在Python2.x的基礎(chǔ)上做了功能升級Python3.x對Python2.x的標(biāo)準(zhǔn)庫進(jìn)行了一定程序的重新拆分和整合,比Python2.x更容易理解,特別是在字符編碼方面。Python2.x中對于中文字符串的支持性能不夠好,需要編寫單獨的代碼對中文進(jìn)行處理,否則不能正確顯示中文,而Python3.x已經(jīng)將該問題成功解決了。Python3.x和Python2.x思想基本是共通的Python3.x和Python2.x思想基本上是共通的,只有少量的語法差別,學(xué)會的Python3.x,只要稍微花點時間學(xué)習(xí)Python2.x的語法,即可靈活運用這兩個不同版本了。注意,選擇Python3.x也不是沒有弊端,很多擴展庫的發(fā)行總是會滯后于Python的發(fā)行版本,甚至目前還有很多庫不支持Python3.x。因此,在選擇Python時,一定要先考慮清楚自己的學(xué)習(xí)目的,比如說,打算做哪方面的開發(fā),此方向需要用法哪些擴展庫,以及這些擴展庫支持的最高Python版本等,明確這些問題后,再選擇適合自己的版本。關(guān)于Python3.x和Python2.x具體的區(qū)別,可閱讀《\hPython3和\h\hPython2區(qū)別\h》一節(jié)。9.Python3和Python2的區(qū)別和\h\hPython\h2.x版本相比,Python3.x版本在語句輸出、編碼、運算和異常等方面做出了一些調(diào)整,本節(jié)就對這些調(diào)整一一做一下簡單介紹。本節(jié)適合有Python基礎(chǔ)的學(xué)員閱讀,初學(xué)者可先跳過本節(jié),整體學(xué)完P(guān)ython之后,再回過頭來閱讀。Python3.xprint函數(shù)代替了print語句在Python2.x中,輸出數(shù)據(jù)使用的是Print語句,例如:>>>print"3,4"3,4或者>>>print(3,4)(3,4)但是在Python3.x中,print語句沒有了,取而代之的是print函數(shù),例如:>>>print(3,4)34如果還像Python2.x中那樣使用print語句,Python編譯器就會報錯,例如:>>>print"3,4"File"<stdin>",line1print"3,4"^SyntaxError:Missingparenthesesincallto'print'Python3.x默認(rèn)使用UTF-8編碼相比Python2.x默認(rèn)采用的\h\hASCII\h編碼,Python3.x默認(rèn)使用UTF-8編碼,可以很好地支持中文或其它非英文字符。例如,輸出一句中文,使用Python2.x和Python3.x的區(qū)別如下:#Python2.x>>>str="\hC\h語言\h中文網(wǎng)">>>str'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91'#Python3.x>>>str="C語言中文網(wǎng)">>>str'C語言中文網(wǎng)'不僅如此,在Python3.x中,下面的代碼也是合法的:>>>中國="China">>>print(中國)ChinaPython3.x除法運算和其他語言相比,Python的除法運算要高端很多,它的除法運算包含2個運算符,分別是/和//,這2個運算符在Python2.x和Python3.x的使用方法如下:/運算符在Python2.x中,使用運算符/進(jìn)行除法運算的方式和\h\hJava\h、C語言類似,整數(shù)相除的結(jié)果仍是一個整數(shù),浮點數(shù)除法會保留小數(shù)點部分,例如:>>>1/20>>>1.0/20.5但是在Python3.x中使用/運算符,整數(shù)之間做除法運算,結(jié)果也會是浮點數(shù)。例如:>>>1/20.5運算符//使用運算符//進(jìn)行的除法運算叫做floor除法,也就是輸出不大于結(jié)果值的一個最大的整數(shù)(向下取整)。此運算符的用法在Python2.x和Python3.x中是一樣的,舉個例子:#Python2.x>>>-1//2-1#Python3.x>>>-1//2-1Python3.x異常在Python3.x版本中,異常處理改變的地方主要在以下幾個方面:在Python2.x版本中,所有類型的對象都是直接被拋出的,但是在Python3.x版本中,只有繼承BaseException的對象才可以被拋出。在Python2.x版本中,捕獲異常的語法是“exceptException,var:”;但在Python3.x版本中,引入了as關(guān)鍵字,捕獲異常的語法變更為“exceptExceptionasvar:”。在Python3.x版本中,處理異常用“raiseException(args)”代替了“raiseException,args”。Python3.x版本中,取消了異常類的序列行為和.message屬性。有關(guān)Python2.x版本和Python3.x版本處理異常的示例代碼如下所示:#Python2.x>>>try:...raiseTypeError,"類型錯誤"...exceptTypeError,err:...printerr.message...類型錯誤#Python3.x>>>try:...raiseTypeError("類型錯誤")...exceptTypeErroraserr:...print(err)...類型錯誤Python3.x八進(jìn)制字面量表示在Python3.x中,表示八進(jìn)制字面量的方式只有一種,并且必須寫成“0o1000”這樣的方式,原來“01000”的方式不能使用了。舉個例子:#Python2.x>>>0o1000512>>>01000512#Python3.x>>>01000File"<stdin>",line101000^SyntaxError:invalidtoken>>>0o1000512Python3.x不等于運算符Python2.x中的不等于運算符有2種寫法,分別為!=和<>,但在Python3.x中去掉了<>,只有!=這一種寫法,例如:#Python2.x>>>1!=2True>>>1<>2True#Python3.x>>>1!=2True>>>1<>2File"<stdin>",line11<>2^SyntaxError:invalidsyntaxPython3.x數(shù)據(jù)類型Python3.x中對數(shù)據(jù)類型也做了改動,比如說:Python3.x去除了long類型,現(xiàn)在只有一種整形int,但它的行為就像是Python2.x版本中的long。Python3.x新增了bytes類型,對應(yīng)Python2.x版本的八位串,定義bytes字面量的方法如下所示:>>>b=b'China'>>>type(b)<type'bytes'>字符串對象和bytes對象可以使用.encode()或者.decode()方法相互轉(zhuǎn)化,例如:>>>s=b.decode()>>>s'China'>>>b1=s.encode()>>>b1b'China' Python3.x中,字典的keys()、items()和values()方法用返回迭代器,且之前的iterkeys()等函數(shù)都被廢棄。同時去掉的還有dict.has_key(),改為用in替代。本節(jié)所介紹的只是Python3.x的一部分改動,由于篇幅有限,這里不再具體指出,教程中涉及到時再給大家詳細(xì)介紹。10.Python2to3:自動將Python2.x代碼轉(zhuǎn)換成Python3.x代碼本節(jié)內(nèi)容針對已有\(zhòng)h\hPython\h基礎(chǔ)的學(xué)員,初學(xué)者可直接跳過本節(jié)內(nèi)容,繼續(xù)往下學(xué)習(xí)。由于Python2.x和Python3.x的差別較大,因此Python2.x的多數(shù)代碼無法直接在Python3.x環(huán)境中運行。而由于兼容性的原因,我們在網(wǎng)絡(luò)上查找的資源多數(shù)是Python2.x的代碼,如果想要在Python3.x環(huán)境下運行,就需要修改源代碼。針對這一問題,Python官方提供了一個將Python2.x代碼自動轉(zhuǎn)換為Python3.x代碼的小工具,它就是2to3.py,通過該工具可以將大部分Python2.x代碼轉(zhuǎn)換為Python3.x代碼。接下來,就給大家詳細(xì)介紹一下,如何使用2to3.py將Python2.x代碼轉(zhuǎn)換成Python3.x代碼。假設(shè)我們現(xiàn)在有Python2.x的代碼,要將其轉(zhuǎn)換成Python3.x代碼,需要按照一下幾個步驟進(jìn)行操作:找到2to3.py文件,該文件保存在Python安裝路徑下的“Tools\scripts”目錄中。比如說,我們將Python安裝在了“G:\Python\Python36”目錄中,那么2to3.py文件則保存在“G:\Python\Python36\Tools\scripts”目錄中,如圖1所示:圖1Python2.x轉(zhuǎn)Python3.x的工具將2to3.py文件復(fù)制到要轉(zhuǎn)換代碼所在的目錄中。打開命令行窗口,并進(jìn)入要轉(zhuǎn)換代碼文件所在的目錄。例如,該文件保存在“E:\change”目錄下,則在命令行窗口中可輸入如下命令:C:\users\Demo>E:E:\>cdchangeE:\change>調(diào)用2to3.py工具轉(zhuǎn)化代碼。例如,要轉(zhuǎn)化的文件名稱為demo.py文件,可以使用下面的代碼:Python2to3.py-wdemo.py執(zhí)行此行代碼之后,將會在“E:\change”目錄下創(chuàng)建一個demo.py
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣體脫硫裝置操作工崗前潛力考核試卷含答案
- 淡水魚類養(yǎng)殖工安全生產(chǎn)規(guī)范知識考核試卷含答案
- 三氯氫硅還原工安全操作考核試卷含答案
- 反應(yīng)香精配制工安全素養(yǎng)考核試卷含答案
- 承包水溝合同范本
- 房屋退款合同范本
- 采購彈簧合同范本
- 路演執(zhí)行合同范本
- 超市廣告合同范本
- 車位沒寫協(xié)議合同
- 2026年中考英語復(fù)習(xí)必背新課標(biāo)1600個詞匯表(音序版帶音標(biāo))
- 一年級看圖說話全集教案
- 【MOOC】《大學(xué)生的智慧籃球》(西南交通大學(xué))章節(jié)期末慕課答案
- 2025陜西省建筑a證考試題庫及答案
- T-ZZB 2956-2022 充氣床墊用及類似用途離心式電動充氣泵
- 天車安全教育培訓(xùn)課件
- 美國心臟協(xié)會心肺復(fù)蘇(CPR)與心血管急救(ECC)指南(2025年)解讀課件
- 2026屆廣東省佛山市南海區(qū)桂城街道七年級數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)檢測試題含解析
- 以租代購電子合同范本
- 2025年衛(wèi)生院基本公共衛(wèi)生服務(wù)宣傳方案
- 2025年民航維修分析報告
評論
0/150
提交評論