作者看著網(wǎng)上各種數(shù)據(jù)分析的知識(shí)泛濫, 但是沒(méi)有什么體系,初學(xué)者不知道學(xué)哪些, 不知道學(xué)多少, 不知道學(xué)多深, 單純一個(gè)python語(yǔ)言, 數(shù)據(jù)分析會(huì)用到那種程度, 不可能說(shuō)像開(kāi)發(fā)那樣去學(xué), numpy如果不是做算法工程師用到的知識(shí)并不多, pandas知識(shí)雜亂無(wú)章, 哪些才是最常用的功能等等, 作者不忍眾生皆苦, 決定寫(xiě)一套python數(shù)據(jù)分析的全套教程, 目前已完成一部分課件的制作。需要說(shuō)明的是, 作為一名數(shù)據(jù)分析師, 你應(yīng)該先會(huì)一點(diǎn)Excel和SQL知識(shí),相關(guān)的內(nèi)容, 網(wǎng)上很多。但是, 即便你一點(diǎn)Excel和SQL都不會(huì)也不會(huì)影響這部分的學(xué)習(xí) !目前作者整理的大綱如下:
在井陘礦等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站制作,井陘礦網(wǎng)站建設(shè)費(fèi)用合理。
第一章 python編程基礎(chǔ)
1.1 python語(yǔ)言概述 1.2 數(shù)據(jù)科學(xué)神器--Anaconda介紹與安裝 1.3 標(biāo)準(zhǔn)輸入輸出 1.4 變量定義與賦值 1.5 數(shù)據(jù)類(lèi)型 1.6 流程控制語(yǔ)句 1.7 函數(shù)
1.8 面向?qū)ο缶幊?第二章 python數(shù)據(jù)清洗之numpy 2.1 核心ndarray對(duì)象的創(chuàng)建 2.2 ndarray對(duì)象常用的屬性和方法 2.3 ndarray對(duì)象的索引和切片 2.4 ndarray對(duì)象的分割與合并 2.5 ndarray對(duì)象的廣播(Broadcast) 2.6 numpy中的算術(shù)運(yùn)算函數(shù) 2.7 numpy中的統(tǒng)計(jì)函數(shù) 2.8 numpy中的排序 搜索 計(jì)數(shù) 去重函數(shù) 2.9 numpy中的字符串函數(shù) 2.10 numpy中可能會(huì)用到的線(xiàn)性代數(shù)模塊(后期機(jī)器學(xué)習(xí)會(huì)用到一點(diǎn))
第三章 數(shù)據(jù)清洗神器pandas
3.1 pandas核心對(duì)象之Series對(duì)象的創(chuàng)建 常用屬性和方法 3.2 pandas核心對(duì)象之DataFrame對(duì)象的創(chuàng)建 常用屬性和方法 3.3 DataFrame對(duì)象的列操作和行操作 3.4 DataFrame對(duì)象的索引和切片 3.5 DataFrame對(duì)象的布爾索引 3.6 數(shù)據(jù)的讀入與導(dǎo)出 3.7 groupby分組運(yùn)算 3.8 數(shù)據(jù)合并與數(shù)據(jù)透視
第四章 數(shù)據(jù)可視化matplotlib seaborn pyecharts
4.1 包括常用圖形的繪制,略
第五章 實(shí)戰(zhàn)案列
5.1 拉勾網(wǎng)數(shù)據(jù)分析相關(guān)職位分析 5.2 boss直聘數(shù)據(jù)分析相關(guān)職位分析 5.3 珍愛(ài)網(wǎng)女性用戶(hù)數(shù)據(jù)分析
第六章 機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)部分, 簡(jiǎn)單的算法會(huì)講手寫(xiě), 難的就用scikit-learn實(shí)現(xiàn), 可能有小伙伴說(shuō), 這是調(diào)包俠干的, 小哥哥!小姐姐!哪有那么多公司, 那么多人自己干寫(xiě)算法的, 有幾個(gè)人敢說(shuō)他寫(xiě)的算法比scikit-learn寫(xiě)得好? 再說(shuō)了, 你是數(shù)據(jù)分析師, 這些是你的工具, 解決問(wèn)題的!不是一天到晚拉格朗日對(duì)偶性!先來(lái)個(gè)機(jī)器學(xué)習(xí)介紹, 然后如下:
6.1 K近鄰算法 6.2 Kmeans算法 6.3 決策樹(shù) 階段案列:決策樹(shù)案列(保險(xiǎn)行業(yè)) 6.4 線(xiàn)性回歸 嶺回歸 Lasso回歸 6.5 邏輯回歸 6.6 樸素貝葉斯 階段案列:推薦系統(tǒng)(電商玩具) 6.7 隨機(jī)森林 6.8 Adaboost 6.9 梯度提升樹(shù)GBDT 6.10 極端梯度提升樹(shù)Xgboost 6.11 支持向量機(jī)SVM 6.12 神經(jīng)網(wǎng)絡(luò) 階段案例:Xgboost案例
------------------------------本節(jié)內(nèi)容-----------------------------------------
python語(yǔ)言概述
在說(shuō)python之前, 我們還是先來(lái)看看計(jì)算機(jī)軟硬件的發(fā)展歷史。
1 計(jì)算機(jī)硬件的發(fā)展歷史
第一代計(jì)算機(jī)-電子管計(jì)算機(jī)(1946-1957)
無(wú)論如何,一項(xiàng)技術(shù)的突破必然伴隨著其他行業(yè)的突破,簡(jiǎn)而言之,電子計(jì)算機(jī)的出現(xiàn),前提必須有電子技術(shù)的進(jìn)步,否則一切都是空談!下面是我列舉出計(jì)算機(jī)硬件的發(fā)展過(guò)程中, 一些比較重要的事件。
1906年, 美國(guó)的Lee De Forest 發(fā)明了電子管。在這之前造出數(shù)字電子計(jì)算機(jī)是不可能的。這為電子計(jì)算機(jī)的發(fā) 展奠定了基礎(chǔ)。
1924年2月, 一個(gè)具有劃時(shí)代意義的公司成立,IBM。
1935年, IBM推出IBM 601機(jī)。 這是一臺(tái)能在一秒鐘算出乘法的穿孔卡片計(jì)算機(jī)。這臺(tái)機(jī)器無(wú)論在自然科學(xué)還是在商業(yè)意義上都具有重要的地位。大約造了1500臺(tái)。
1937年, 英國(guó)劍橋大學(xué)的Alan M. Turing (1912-1954)出版了他的論文 ,并提出了被后人稱(chēng)之為"圖靈機(jī)"的數(shù)學(xué)模型。
1937年, 美國(guó)貝爾試驗(yàn)室的George Stibitz展示了用繼電器表示二進(jìn)制的裝置。盡管僅僅是個(gè)展示品,但卻是世界上第一臺(tái)二進(jìn)制電子計(jì)算機(jī)。
1941年, Atanasoff和學(xué)生Berry完成了能解線(xiàn)性代數(shù)方程的計(jì)算機(jī),取名叫"ABC"(Atanasoff-Berry Computer),用電容作存儲(chǔ)器,用穿孔卡片作輔助存儲(chǔ)器,那些孔實(shí)際上是"燒"上的。 時(shí)鐘頻率是60HZ,完成一次加法運(yùn)算用時(shí)一秒。這就是ABC計(jì)算機(jī)。
1946年, 美國(guó)賓夕法尼亞大學(xué),第一臺(tái)通用電子計(jì)算機(jī)ENIAC (Electronic Numerical Integrator 和 Computer)誕生, 總工程師埃克特在當(dāng)時(shí)年僅25歲。
這時(shí)的計(jì)算機(jī)的基本線(xiàn)路是采用電子管結(jié)構(gòu),程序從人工手編的 機(jī)器指令程序(0 1),過(guò)渡到符號(hào)語(yǔ)言(匯編),電子管計(jì)算機(jī)是計(jì)算工具革命性發(fā)展的開(kāi)始,它所采用的進(jìn)位制與程序存貯等基本技術(shù)思想,奠定了現(xiàn)代電子計(jì)算機(jī)技術(shù)基礎(chǔ)。以馮·諾依曼為代表。
第二代計(jì)算機(jī)——晶體管計(jì)算機(jī)(時(shí)間1957~1964)
電子管時(shí)代的計(jì)算機(jī)盡管已經(jīng)步入了現(xiàn)代計(jì)算機(jī)的范疇,但其體積之大、能耗之高、故障之多、價(jià)格之貴大大制約了它的普及應(yīng)用。直到晶體管被發(fā)明出來(lái),電子計(jì)算機(jī)才找到了騰飛的起點(diǎn),一發(fā)而不可收……
20世紀(jì)50年代中期,晶體管的出現(xiàn)使計(jì)算機(jī)生產(chǎn)技術(shù)得到了根本性的發(fā)展,由晶體管代替電子管作為計(jì)算機(jī)的基礎(chǔ)器件,用 磁芯或磁鼓作存儲(chǔ)器,在整體性能上,比第一代計(jì)算機(jī)有了很大的提高。
第三代計(jì)算機(jī)——中小規(guī)模集成電路計(jì)算機(jī)(時(shí)間1964~1971)
20世紀(jì)60年代中期, 計(jì)算機(jī)發(fā)展歷程隨著半導(dǎo)體工藝的發(fā)展,成功制造了集成電路。中小規(guī)模集成電路成為計(jì)算機(jī)的主要部件,主存儲(chǔ)器也漸漸過(guò)渡到 半導(dǎo)體存儲(chǔ)器,使計(jì)算機(jī)的體積更小,大大降低了計(jì)算機(jī)計(jì)算時(shí)的功耗,由于減少了 焊點(diǎn)和 接插件,進(jìn)一步提高了計(jì)算機(jī)的可靠性。
第四代計(jì)算機(jī)——大規(guī)模和超大規(guī)模集成電路計(jì)算機(jī)(時(shí)間1971~至今)
隨著大規(guī)模集成電路的成功制作并用于計(jì)算機(jī)硬件生產(chǎn)過(guò)程,計(jì)算機(jī)的體積進(jìn)一步縮小,性能進(jìn)一步提高。集成更高的大容量半導(dǎo)體存儲(chǔ)器作為內(nèi)存儲(chǔ)器,發(fā)展了并行技術(shù)和多機(jī)系統(tǒng),出現(xiàn)了 精簡(jiǎn)指令集計(jì)算機(jī)(RISC),軟件系統(tǒng)工程化、理論化,程序設(shè)計(jì)自動(dòng)化。微型計(jì)算機(jī)在社會(huì)上的應(yīng)用范圍進(jìn)一步擴(kuò)大,幾乎所有領(lǐng)域都能看到計(jì)算機(jī)的“身影”。
第五代計(jì)算機(jī)——泛指具有人工智能的計(jì)算機(jī)(至今~未來(lái))
目前還沒(méi)有明確地定義
2 簡(jiǎn)述計(jì)算機(jī)軟件的發(fā)展歷史
編程語(yǔ)言的發(fā)展
計(jì)算機(jī)軟件系統(tǒng)的發(fā)展,也伴隨著編程語(yǔ)言的發(fā)展。計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的發(fā)展,經(jīng)歷了從機(jī)器語(yǔ)言、匯編語(yǔ)言到高級(jí)語(yǔ)言的歷程。
機(jī)器語(yǔ)言:簡(jiǎn)單點(diǎn)說(shuō),機(jī)器本身也只認(rèn)識(shí)0和1,電路無(wú)非就只有通和斷兩種狀態(tài),對(duì)應(yīng)的二進(jìn)制就是二進(jìn)制的1和1。
匯編語(yǔ)言:匯編語(yǔ)言只是把一些特殊的二進(jìn)制用特殊的符號(hào)表示,例如,機(jī)器要傳送一個(gè)數(shù)據(jù),假設(shè)“傳送”這個(gè)指令對(duì)應(yīng)的機(jī)器碼是000101,則人們把000101用一個(gè)特殊符號(hào),比如mov來(lái)表示,當(dāng)人們要用這個(gè)指令時(shí)用mov就行,但是mov的本質(zhì)還是000101,沒(méi)有脫離硬件的范圍,有可能這個(gè)指令不能在其他機(jī)器上用。
高級(jí)語(yǔ)言:高級(jí)語(yǔ)言完全脫離了硬件范疇,所有的語(yǔ)法更貼近人類(lèi)的自然語(yǔ)言,人們只需要清楚高級(jí)語(yǔ)言的語(yǔ)法,寫(xiě)出程序就行了,剩下的交給編譯器或者解釋器去編譯或者解釋成機(jī)器語(yǔ)言就行了,看,這樣就完全脫離了硬件的范疇,大大提高了程序的開(kāi)發(fā)效率。接下來(lái)我們就來(lái)看看高級(jí)語(yǔ)言的發(fā)展,高級(jí)語(yǔ)言非常多,我們主要看看比較經(jīng)典的幾個(gè)。
高級(jí)語(yǔ)言的發(fā)展
B語(yǔ)言與Unix
20世紀(jì)60年代,貝爾實(shí)驗(yàn)室的研究員Ken Thompson(肯·湯普森)發(fā)明了B語(yǔ)言,并使用B編了個(gè)游戲 - Space Travel,他想玩自己這個(gè)游戲,所以他背著老板找到了臺(tái)空閑的機(jī)器 - PDP-7,但是這臺(tái)機(jī)器沒(méi)有操作系統(tǒng),于是Thompson著手為PDP-7開(kāi)發(fā)操作系統(tǒng),后來(lái)這個(gè)OS被命名為 - UNIX。
C語(yǔ)言
1971年,Ken Thompson(肯·湯普森)的同事D.M.Ritchie(DM里奇),也很想玩Space Travel,所以加入了Ken Thompson,合作開(kāi)發(fā)UNIX,他的主要工作是改進(jìn)Thompson的B語(yǔ)言。最終,在1972年這個(gè)新語(yǔ)言被稱(chēng)為C,取BCPL的第二個(gè)字母,也是B的下一個(gè)字母。
C語(yǔ)言和Unix
1973年,C主體完成。Ken Thompson和D.M.Ritchie迫不及待的開(kāi)始用C語(yǔ)言完全重寫(xiě)了UNIX。此時(shí)編程的樂(lè)趣已經(jīng)使他們完全忘記了那個(gè)“Space Travel”,一門(mén)心思的投入到了UNIX和C語(yǔ)言的開(kāi)發(fā)中。自此,C語(yǔ)言和UNIX相輔相成的發(fā)展至今。
類(lèi)C語(yǔ)言起源、歷史
C++(C plus plus Programming Language) - 1983
還是貝爾實(shí)驗(yàn)室的人,Bjarne Stroustrup(本賈尼·斯特勞斯特盧普) 在C語(yǔ)言的基礎(chǔ)上推出了C++,它擴(kuò)充和完善了C語(yǔ)言,特別是在面向?qū)ο缶幊谭矫?。一定程度上克服了C語(yǔ)言編寫(xiě)大型程序時(shí)的不足。
Python (Python Programming Language)--1991
1989年圣誕節(jié)期間,Guido van Rossum 在阿姆斯特丹,Guido van Rossum為了打發(fā)圣誕節(jié)的無(wú)趣,決心開(kāi)發(fā)一個(gè)新的腳本解釋程序,做為ABC語(yǔ)言的一種繼承。之所以選中Python(大蟒蛇的意思)作為該編程語(yǔ)言的名字,是因?yàn)樗且粋€(gè)叫Monty Python的喜劇團(tuán)體的愛(ài)好者。第一個(gè)Python的版本發(fā)布于1991年。
Java(Java Programming Language) - 1995
Sun公司的Patrick Naughton的工作小組研發(fā)了Java語(yǔ)言,主要成員是James Gosling(詹姆斯·高斯林)
C(C Sharp Programming Language) - 2000
Microsoft公司的Anders Hejlsberg(安德斯·海爾斯伯格)發(fā)明了C,他也是Delphi語(yǔ)言之父。
當(dāng)然現(xiàn)在還有一些新語(yǔ)言,比如2009年Google的go語(yǔ)言,以及麻省理工的julia等。
3 為什么是Python
Python有哪些優(yōu)點(diǎn)
1 語(yǔ)法簡(jiǎn)單 漂亮:我們可以說(shuō)Python是簡(jiǎn)約的語(yǔ)言,非常易于讀寫(xiě)。在遇到問(wèn)題時(shí),我們可以把更多的注意力放在問(wèn)題本身上,而不用花費(fèi)太多精力在程序語(yǔ)言、語(yǔ)法上。
2 豐富而免費(fèi)的庫(kù):Python社區(qū)創(chuàng)造了各種各樣的Python庫(kù)。在他們的幫助下,你可以管理文檔,執(zhí)行單元測(cè)試、數(shù)據(jù)庫(kù)、web瀏覽器、電子郵件、密碼學(xué)、圖形用戶(hù)界面和更多的東西。所有東西包括在標(biāo)準(zhǔn)庫(kù),然而,除了它,還有很多其他的庫(kù)。
3 開(kāi)源:Python是免費(fèi)開(kāi)源的。這意味著我們不用花錢(qián),就可以共享、復(fù)制和交換它,這也幫助Python形成了豐富的社區(qū)資源,使其更加完善,技術(shù)發(fā)展更快。
4 Python既支持面向過(guò)程,也支持面向?qū)ο缶幊?。在面向過(guò)程編程中,程序員復(fù)用代碼,在面向?qū)ο缶幊讨校褂没跀?shù)據(jù)和函數(shù)的對(duì)象。盡管面向?qū)ο蟮某绦蛘Z(yǔ)言通常十分復(fù)雜,Python卻設(shè)法保持簡(jiǎn)潔。
5 Python兼容眾多平臺(tái),所以開(kāi)發(fā)者不會(huì)遇到使用其他語(yǔ)言時(shí)常會(huì)遇到的困擾。
Python有哪些作用
Python是什么都能做,但是我們學(xué)的是數(shù)據(jù)分析,我們看看在數(shù)據(jù)分析領(lǐng)域Python能做什么。
數(shù)據(jù)采集:以Scrapy 為代表的各類(lèi)方式的爬蟲(chóng)
數(shù)據(jù)鏈接:Python有大量各類(lèi)數(shù)據(jù)庫(kù)的第三方包,方便快速的實(shí)現(xiàn)增刪改查
數(shù)據(jù)清洗:Numpy、Pandas,結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)清洗及數(shù)據(jù)規(guī)整化的利器
數(shù)據(jù)分析:Scikit-Learn、Scipy,統(tǒng)計(jì)分析,科學(xué)計(jì)算、建模等
數(shù)據(jù)可視化:Matplotlib、Seaborn等等大量各類(lèi)可視化的庫(kù)
所以說(shuō)總結(jié), 為什么數(shù)據(jù)科學(xué)選的是python, 最重要就是兩個(gè)原因:
1 語(yǔ)法簡(jiǎn)單漂亮
2 大量豐富免費(fèi)的第三方庫(kù)
raw_input("")
start()
改成上面這樣,raw_input()會(huì)等待用戶(hù)輸入,只有用戶(hù)輸入了信息后,才會(huì)執(zhí)行start()
這個(gè)問(wèn)題,300分你還真舍得,我還以為我的回答消失了呢。。。原來(lái)是兩個(gè)問(wèn)題。。
Python2.x與3.x版本區(qū)別
Python的3.0版本,常被稱(chēng)為Python 3000,或簡(jiǎn)稱(chēng)Py3k。相對(duì)于Python的早期版本,這是一個(gè)較大的升級(jí)。
為了不帶入過(guò)多的累贅,Python 3.0在設(shè)計(jì)的時(shí)候沒(méi)有考慮向下相容。
許多針對(duì)早期Python版本設(shè)計(jì)的程式都無(wú)法在Python 3.0上正常執(zhí)行。
為了照顧現(xiàn)有程式,Python 2.6作為一個(gè)過(guò)渡版本,基本使用了Python 2.x的語(yǔ)法和庫(kù),同時(shí)考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語(yǔ)法與函數(shù)。
新的Python程式建議使用Python 3.0版本的語(yǔ)法。
除非執(zhí)行環(huán)境無(wú)法安裝Python 3.0或者程式本身使用了不支援Python 3.0的第三方庫(kù)。目前不支援Python 3.0的第三方庫(kù)有Twisted, py2exe, PIL等。
大多數(shù)第三方庫(kù)都正在努力地相容Python 3.0版本。即使無(wú)法立即使用Python 3.0,也建議編寫(xiě)相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7來(lái)執(zhí)行。
Python 3.0的變化主要在以下幾個(gè)方面:
print 函數(shù)
print語(yǔ)句沒(méi)有了,取而代之的是print()函數(shù)。 Python 2.6與Python 2.7部分地支持這種形式的print語(yǔ)法。在Python 2.6與Python 2.7里面,以下三種形式是等價(jià)的:
print "fish"print ("fish") #注意print后面有個(gè)空格print("fish") #print()不能帶有任何其它參數(shù)
然而,Python 2.6實(shí)際已經(jīng)支持新的print()語(yǔ)法:
from __future__ import print_functionprint("fish", "panda", sep=', ')
Unicode
Python 2 有 ASCII str() 類(lèi)型,unicode() 是單獨(dú)的,不是 byte 類(lèi)型。
現(xiàn)在, 在 Python 3,我們最終有了 Unicode (utf-8) 字符串,以及一個(gè)字節(jié)類(lèi):byte 和 bytearrays。
由于 Python3.X 源碼文件默認(rèn)使用utf-8編碼,這就使得以下代碼是合法的:
中國(guó) = 'china'print(中國(guó))china
Python 2.x
str = "我愛(ài)北京天安門(mén)" str'?????±????o??¤????é?¨' str = u"我愛(ài)北京天安門(mén)" stru'我愛(ài)北京天安門(mén)'
Python 3.x
str = "我愛(ài)北京天安門(mén)" str'我愛(ài)北京天安門(mén)'
除法運(yùn)算
Python中的除法較其它語(yǔ)言顯得非常高端,有套很復(fù)雜的規(guī)則。Python中的除法有兩個(gè)運(yùn)算符,/和//
首先來(lái)說(shuō)/除法:
在python 2.x中/除法就跟我們熟悉的大多數(shù)語(yǔ)言,比如Java啊C啊差不多,整數(shù)相除的結(jié)果是一個(gè)整數(shù),把小數(shù)部分完全忽略掉,浮點(diǎn)數(shù)除法會(huì)保留小數(shù)點(diǎn)的部分得到一個(gè)浮點(diǎn)數(shù)的結(jié)果。
在python 3.x中/除法不再這么做了,對(duì)于整數(shù)之間的相除,結(jié)果也會(huì)是浮點(diǎn)數(shù)。
Python 2.x:
1 / 20 1.0 / 2.00.5
Python 3.x:
1/20.5
而對(duì)于//除法,這種除法叫做floor除法,會(huì)對(duì)除法的結(jié)果自動(dòng)進(jìn)行一個(gè)floor操作,在python 2.x和python 3.x中是一致的。
python 2.x:
-1 // 2-1
python 3.x:
-1 // 2-1
注意的是并不是舍棄小數(shù)部分,而是執(zhí)行floor操作,如果要截取小數(shù)部分,那么需要使用math模塊的trunc函數(shù)
python 3.x:
import math math.trunc(1 / 2)0 math.trunc(-1 / 2)0
異常
在 Python 3 中處理異常也輕微的改變了,在 Python 3 中我們現(xiàn)在使用 as 作為關(guān)鍵詞。
捕獲異常的語(yǔ)法由?except exc, var?改為?except exc as var。
使用語(yǔ)法except (exc1, exc2) as var可以同時(shí)捕獲多種類(lèi)別的異常。 Python 2.6已經(jīng)支持這兩種語(yǔ)法。
1. 在2.x時(shí)代,所有類(lèi)型的對(duì)象都是可以被直接拋出的,在3.x時(shí)代,只有繼承自BaseException的對(duì)象才可以被拋出。
2. 2.x raise語(yǔ)句使用逗號(hào)將拋出對(duì)象類(lèi)型和參數(shù)分開(kāi),3.x取消了這種奇葩的寫(xiě)法,直接調(diào)用構(gòu)造函數(shù)拋出對(duì)象即可。
在2.x時(shí)代,異常在代碼中除了表示程序錯(cuò)誤,還經(jīng)常做一些普通控制結(jié)構(gòu)應(yīng)該做的事情,在3.x中可以看出,設(shè)計(jì)者讓異常變的更加專(zhuān)一,只有在錯(cuò)誤發(fā)生的情況才能去用異常捕獲語(yǔ)句來(lái)處理。
xrange
在 Python 2 中 xrange() 創(chuàng)建迭代對(duì)象的用法是非常流行的。比如: for 循環(huán)或者是列表/集合/字典推導(dǎo)式。
這個(gè)表現(xiàn)十分像生成器(比如。"惰性求值")。但是這個(gè) xrange-iterable 是無(wú)窮的,意味著你可以無(wú)限遍歷。
由于它的惰性求值,如果你不得僅僅不遍歷它一次,xrange() 函數(shù) 比 range() 更快(比如 for 循環(huán))。盡管如此,對(duì)比迭代一次,不建議你重復(fù)迭代多次,因?yàn)樯善髅看味紡念^開(kāi)始。
在 Python 3 中,range() 是像 xrange() 那樣實(shí)現(xiàn)以至于一個(gè)專(zhuān)門(mén)的 xrange() 函數(shù)都不再存在(在 Python 3 中 xrange() 會(huì)拋出命名異常)。
import timeitn = 10000def test_range(n):return for i in range(n):passdef test_xrange(n):for i in xrange(n):pass
Python 2
print 'Python', python_version()print ' timing range()'%timeit test_range(n)print ' timing xrange()'%timeit test_xrange(n)Python 2.7.6timing range()1000 loops, best of 3: 433 μs per looptiming xrange()1000 loops, best of 3: 350 μs per loop
Python 3
print('Python', python_version())print(' timing range()')%timeit test_range(n)Python 3.4.1timing range()1000 loops, best of 3: 520 μs per loop
print(xrange(10))---------------------------------------------------------------------------NameError Traceback (most recent call last)ipython-input-5-5d8f9b79ea70 in module()---- 1 print(xrange(10))NameError: name 'xrange' is not defined
八進(jìn)制字面量表示
八進(jìn)制數(shù)必須寫(xiě)成0o777,原來(lái)的形式0777不能用了;二進(jìn)制必須寫(xiě)成0b111。
新增了一個(gè)bin()函數(shù)用于將一個(gè)整數(shù)轉(zhuǎn)換成二進(jìn)制字串。 Python 2.6已經(jīng)支持這兩種語(yǔ)法。
在Python 3.x中,表示八進(jìn)制字面量的方式只有一種,就是0o1000。
python 2.x
0o1000512 01000512
python 3.x
01000File "stdin", line 101000^SyntaxError: invalid token 0o1000512
不等運(yùn)算符
Python 2.x中不等于有兩種寫(xiě)法 != 和
Python 3.x中去掉了, 只有!=一種寫(xiě)法,還好,我從來(lái)沒(méi)有使用的習(xí)慣
去掉了repr表達(dá)式``
Python 2.x 中反引號(hào)``相當(dāng)于repr函數(shù)的作用
Python 3.x 中去掉了``這種寫(xiě)法,只允許使用repr函數(shù),這樣做的目的是為了使代碼看上去更清晰么?不過(guò)我感覺(jué)用repr的機(jī)會(huì)很少,一般只在debug的時(shí)候才用,多數(shù)時(shí)候還是用str函數(shù)來(lái)用字符串描述對(duì)象。
def sendMail(from_: str, to: str, title: str, body: str) - bool:pass
多個(gè)模塊被改名(根據(jù)PEP8)
舊的名字
新的名字
_winreg ? ?winreg ?
ConfigParser ? ?configparser ?
copy_reg ? ?copyreg ?
Queue ? ?queue ?
SocketServer ? ?socketserver ?
repr ? ?reprlib ?
StringIO模塊現(xiàn)在被合并到新的io模組內(nèi)。 new, md5, gopherlib等模塊被刪除。 Python 2.6已經(jīng)支援新的io模組。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包內(nèi)。
取消了exec語(yǔ)句,只剩下exec()函數(shù)。 Python 2.6已經(jīng)支援exec()函數(shù)。
5.數(shù)據(jù)類(lèi)型
1)Py3.X去除了long類(lèi)型,現(xiàn)在只有一種整型——int,但它的行為就像2.X版本的long
2)新增了bytes類(lèi)型,對(duì)應(yīng)于2.X版本的八位串,定義一個(gè)bytes字面量的方法如下:
b = b'china' type(b)type 'bytes'
str對(duì)象和bytes對(duì)象可以使用.encode() (str - bytes) or .decode() (bytes - str)方法相互轉(zhuǎn)化。
s = b.decode() s'china' b1 = s.encode() b1b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函數(shù)都被廢棄。同時(shí)去掉的還有 dict.has_key(),用 in替代它吧 。