大數(shù)據(jù)測(cè)試技術(shù)數(shù)據(jù)采集、分析與測(cè)試實(shí)踐PPT完整全套教學(xué)課件_第1頁(yè)
大數(shù)據(jù)測(cè)試技術(shù)數(shù)據(jù)采集、分析與測(cè)試實(shí)踐PPT完整全套教學(xué)課件_第2頁(yè)
大數(shù)據(jù)測(cè)試技術(shù)數(shù)據(jù)采集、分析與測(cè)試實(shí)踐PPT完整全套教學(xué)課件_第3頁(yè)
大數(shù)據(jù)測(cè)試技術(shù)數(shù)據(jù)采集、分析與測(cè)試實(shí)踐PPT完整全套教學(xué)課件_第4頁(yè)
大數(shù)據(jù)測(cè)試技術(shù)數(shù)據(jù)采集、分析與測(cè)試實(shí)踐PPT完整全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩678頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第一章:大數(shù)據(jù)測(cè)試的思維第1章:大數(shù)據(jù)測(cè)試的思維.pptx第2章:大數(shù)據(jù)收集概述.pptx第3章:網(wǎng)絡(luò)數(shù)據(jù)的采集與分析.pptx第4章:數(shù)據(jù)格式轉(zhuǎn)換及Python編程.pptx第5章:Splunk軟件初探.pptx第6章:Splunk平臺(tái)實(shí)踐.pptx第7章:SPL案例編程.pptx第8章:數(shù)據(jù)導(dǎo)入及錯(cuò)誤分析.pptx第9章:聯(lián)網(wǎng)效率分析.pptx第10章:Linux部署.pptx第11章:大數(shù)據(jù)測(cè)試實(shí)踐.pptx全套PPT課件內(nèi)容大數(shù)據(jù)背后的規(guī)律傳統(tǒng)軟件測(cè)試方法大數(shù)據(jù)測(cè)試方法大數(shù)據(jù)測(cè)試思維大數(shù)據(jù)背后的規(guī)律數(shù)據(jù)背后是否存在規(guī)律?大數(shù)據(jù)背后的故事數(shù)據(jù)背后是否存在規(guī)律今天我們面臨著海量的數(shù)據(jù)膨脹1018個(gè)字節(jié)(2003年)1021個(gè)字節(jié)(2013年)8*1021個(gè)字節(jié)(2015年)估計(jì)44ZB個(gè)字節(jié)(2020年)淘寶網(wǎng)推出了“時(shí)光機(jī)”---“個(gè)人網(wǎng)購(gòu)日志”購(gòu)買(mǎi)記錄、瀏覽點(diǎn)擊次數(shù)、收貨地址數(shù)據(jù)當(dāng)作一種重要的戰(zhàn)略資源對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的查詢(xún)和分類(lèi)統(tǒng)計(jì),得出一些規(guī)律,但往往這些規(guī)律并不存在當(dāng)數(shù)據(jù)規(guī)模達(dá)到一定數(shù)量時(shí),原來(lái)的“經(jīng)驗(yàn)”就變得不一定準(zhǔn)確基于大數(shù)據(jù)分析之后,AlphaGo曾下出了人類(lèi)長(zhǎng)期以來(lái)認(rèn)為是虧損的棋路大數(shù)據(jù)的背后(案例1)全球零售業(yè)巨頭沃爾瑪在對(duì)消費(fèi)者購(gòu)物行為分析時(shí)發(fā)現(xiàn),男性顧客在購(gòu)買(mǎi)嬰兒尿片時(shí),常常會(huì)順便搭配幾瓶啤酒來(lái)犒勞自己,于是嘗試推出了將啤酒和尿片擺在一起的促銷(xiāo)手段,沒(méi)想到這個(gè)舉措居然使尿片和啤酒的銷(xiāo)量都大幅增加了。如果轉(zhuǎn)換一種思路來(lái)理解這種現(xiàn)象,考慮“奶爸”在世界杯期間既想看足球比賽,又要帶自己的孩子,為了不耽誤他們觀看完整的足球比賽,他們會(huì)將孩子放在邊上,任由他們玩耍,而自己喝啤酒慶祝球隊(duì)的勝利,因此,他們需要購(gòu)買(mǎi)尿片來(lái)幫助他們的小寶寶隔尿,同時(shí)不影響自己喝啤酒慶祝球隊(duì)的勝利。大數(shù)據(jù)的背后(案例2)另一個(gè)經(jīng)典的例子就是Google預(yù)測(cè)流感案例。2009年2月,國(guó)際權(quán)威期刊Nature上刊登了一篇名為Detectinginfluenzaepidemicsusingsearchenginequerydata的文章,論述了Google基于用戶(hù)的搜索日志(包括搜索關(guān)鍵詞、用戶(hù)搜索頻率以及用戶(hù)IP地址等信息),成功“預(yù)測(cè)”了流感病人的就診人數(shù)。Google是如何做到的呢?原來(lái)美國(guó)有個(gè)疾控中心,它統(tǒng)計(jì)了美國(guó)本土各個(gè)地區(qū)的疾病就診人數(shù),一般會(huì)延遲兩周公布數(shù)據(jù)。而Google利用其搜索引擎搭建了一個(gè)預(yù)測(cè)平臺(tái),提前獲取疾控中心的大數(shù)據(jù),并對(duì)這些數(shù)據(jù)進(jìn)行回歸分析,從而成功地預(yù)測(cè)了復(fù)雜的流感規(guī)模問(wèn)題。大數(shù)據(jù)的背后(案例3)在國(guó)內(nèi),杭州市首次利用大數(shù)據(jù)治理交通阻塞問(wèn)題。2016年10月,杭州市政府聯(lián)合阿里云公布了一項(xiàng)計(jì)劃:建立杭州市的數(shù)據(jù)大腦。城市大腦的內(nèi)核將采用阿里云ET人工智能技術(shù),對(duì)整個(gè)城市進(jìn)行全局實(shí)時(shí)分析,自動(dòng)調(diào)配公共資源,修正城市運(yùn)行中的問(wèn)題,并最終進(jìn)化成為治理城市的超級(jí)人工智能。“緩解交通阻塞”是城市大腦的首個(gè)嘗試,并已經(jīng)在蕭山區(qū)的中心路段投入使用,部分路段車(chē)輛通行速度提升了11%。大數(shù)據(jù)與軟件測(cè)試能否將大數(shù)據(jù)的處理方法運(yùn)用到實(shí)際的軟件測(cè)試中,以便發(fā)現(xiàn)軟件中的缺陷呢?如果能夠獲得海量的用戶(hù)使用軟件的數(shù)據(jù),再利用大數(shù)據(jù)處理技術(shù)對(duì)這些數(shù)據(jù)進(jìn)行分析,就能從中發(fā)現(xiàn)致使軟件執(zhí)行失效的小概率事件,從而發(fā)現(xiàn)軟件缺陷,這種測(cè)試方法稱(chēng)為大數(shù)據(jù)測(cè)試方法。傳統(tǒng)的軟件測(cè)試方法在瀑布式軟件開(kāi)發(fā)流程中的4個(gè)測(cè)試階段傳統(tǒng)的軟件測(cè)試方法傳統(tǒng)軟件測(cè)試方法的特點(diǎn)需要測(cè)試人員來(lái)設(shè)計(jì)測(cè)試用例測(cè)試用例的總數(shù)是小樣本的傳統(tǒng)軟件開(kāi)發(fā)的生命周期是從需求分析開(kāi)始,到軟件產(chǎn)品發(fā)布截止大數(shù)據(jù)測(cè)試方法但隨著時(shí)代的發(fā)展,軟件并非是在發(fā)布之后就停止更新,往往會(huì)在很短的時(shí)間內(nèi)繼續(xù)推出新的版本,如部分品牌的手機(jī)操作系統(tǒng)已經(jīng)實(shí)現(xiàn)了一月甚至一周一更新。從長(zhǎng)時(shí)間看,軟件處于一個(gè)長(zhǎng)期迭代的過(guò)程,可以在每一次軟件開(kāi)發(fā)和修改時(shí)采用傳統(tǒng)軟件測(cè)試技術(shù)進(jìn)行測(cè)試,而在軟件的某一版本發(fā)布之后實(shí)施大數(shù)據(jù)測(cè)試。大數(shù)據(jù)測(cè)試方法大數(shù)據(jù)測(cè)試的階段和特點(diǎn)大數(shù)據(jù)測(cè)試方法包括:用戶(hù)使用、數(shù)據(jù)收集、大數(shù)據(jù)分析及軟件缺陷挖掘4個(gè)階段。特點(diǎn):不需要測(cè)試人員設(shè)計(jì)測(cè)試用例。大數(shù)據(jù)測(cè)試方法需要收集海量的用戶(hù)使用數(shù)據(jù),這相當(dāng)于海量用戶(hù)對(duì)軟件進(jìn)行測(cè)試。不需要傳統(tǒng)的測(cè)試過(guò)程來(lái)發(fā)現(xiàn)軟件錯(cuò)誤。借助大數(shù)據(jù)分析的方法來(lái)實(shí)現(xiàn)軟件錯(cuò)誤的挖掘。思考:1)如何收集海量用戶(hù)使用數(shù)據(jù)?2)如何對(duì)海量數(shù)據(jù)進(jìn)行挖掘,以便發(fā)現(xiàn)軟件bug呢?大數(shù)據(jù)的測(cè)試思維大數(shù)據(jù)測(cè)試思想的核心是通過(guò)分析海量用戶(hù)的使用數(shù)據(jù)來(lái)發(fā)現(xiàn)傳統(tǒng)軟件測(cè)試階段不易檢測(cè)出來(lái)的軟件缺陷,而不是單純地從技術(shù)角度出發(fā)設(shè)計(jì)測(cè)試用例探測(cè)軟件缺陷。大數(shù)據(jù)測(cè)試方法并不能替代傳統(tǒng)的軟件測(cè)試方法,即使探測(cè)出軟件缺陷之后,仍需要軟件測(cè)試人員采用傳統(tǒng)的軟件測(cè)試方法設(shè)計(jì)測(cè)試用例,進(jìn)而發(fā)現(xiàn)軟件錯(cuò)誤的位置并修復(fù)它們。小結(jié)本章重點(diǎn):理解大數(shù)據(jù)測(cè)試的過(guò)程及相關(guān)階段。第二章:大數(shù)據(jù)收集概述內(nèi)容目的案例介紹原理及方法環(huán)境配置數(shù)據(jù)采集同步操作小結(jié)目的介紹如何利用手機(jī)、360隨身Wi-Fi和Wireshark軟件抓取手機(jī)APP進(jìn)行網(wǎng)絡(luò)傳輸時(shí)的數(shù)據(jù)包,如何利用TotalControl工具來(lái)實(shí)現(xiàn)PC端對(duì)手機(jī)的控制,最終實(shí)現(xiàn)對(duì)手機(jī)APP軟件聯(lián)網(wǎng)的數(shù)據(jù)收集。案例介紹在使用手機(jī)APP時(shí),用戶(hù)常常會(huì)遇到一種情況,在某個(gè)地方(如便利店中)使用手機(jī)微信收發(fā)信息是正常的,但此時(shí)使用另外一款A(yù)PP可能提示網(wǎng)絡(luò)并不可用。在一天當(dāng)中,電腦連接的網(wǎng)絡(luò)是固定的,而手機(jī)網(wǎng)絡(luò)則隨著手機(jī)持有者所在的位置不同而不同,總是在不同基站之間、不同的Wi-Fi之間或者是基站網(wǎng)絡(luò)與Wi-Fi網(wǎng)絡(luò)之間切換。在這種狀況下,手機(jī)APP必須對(duì)網(wǎng)絡(luò)切換適應(yīng)性能進(jìn)行必要的優(yōu)化,保證在網(wǎng)絡(luò)切換過(guò)程中手機(jī)APP的可用性。案例分析探測(cè)某款手機(jī)APP在網(wǎng)絡(luò)切換時(shí)的可用性是一件非常難的事情,首先,測(cè)試環(huán)境是千差萬(wàn)別的;其次,即使是同一環(huán)境、同一地點(diǎn),不同時(shí)間也可能會(huì)存在網(wǎng)絡(luò)的不穩(wěn)定。因此,單純地在某一個(gè)地點(diǎn)進(jìn)行一次或多次測(cè)試難以探測(cè)手機(jī)APP在網(wǎng)絡(luò)切換時(shí)的可用性,必須對(duì)大量的手機(jī)APP連接網(wǎng)絡(luò)的數(shù)據(jù)進(jìn)行分析才能探測(cè)手機(jī)APP在網(wǎng)絡(luò)切換時(shí)的可用性問(wèn)題。原理及方法原理:采用360隨身Wi-Fi將手機(jī)與電腦進(jìn)行網(wǎng)絡(luò)連接,隨后通過(guò)Wireshark軟件來(lái)抓取手機(jī)APP進(jìn)行網(wǎng)絡(luò)傳輸時(shí)的數(shù)據(jù)包。方法:360隨身Wi-Fi利用電腦的網(wǎng)絡(luò)來(lái)創(chuàng)建無(wú)線(xiàn)熱點(diǎn)采用Wireshark軟件抓取并顯示網(wǎng)絡(luò)封包的詳細(xì)信息采用TotalControl實(shí)現(xiàn)電腦對(duì)手機(jī)的控制環(huán)境配置配置無(wú)線(xiàn)網(wǎng)以Windows10系統(tǒng)為例,右擊【此電腦】圖標(biāo),選擇【屬性】命令,打開(kāi)【系統(tǒng)】窗口,在左側(cè)窗格中選擇【設(shè)備管理器】,打開(kāi)【設(shè)備管理器】窗口,選擇【網(wǎng)絡(luò)適配器】選項(xiàng),找到無(wú)線(xiàn)網(wǎng)卡環(huán)境配置Windows10操作系統(tǒng)中,有時(shí)需要對(duì)無(wú)線(xiàn)網(wǎng)卡的驅(qū)動(dòng)進(jìn)行降級(jí),但Windows7操作系統(tǒng)中可以跳過(guò)這步。右單擊【Intel(R)Wireless-N7260】選項(xiàng),選擇【更新驅(qū)動(dòng)程序】命令,在打開(kāi)的對(duì)話(huà)框中選擇【瀏覽我的計(jì)算機(jī)以查找驅(qū)動(dòng)程序軟件】選項(xiàng),再在打開(kāi)的對(duì)話(huà)框中選擇【讓我從計(jì)算機(jī)上的可用驅(qū)動(dòng)程序列表中選取】選項(xiàng),單擊【下一步】按鈕后,在打開(kāi)的窗口中選擇一個(gè)先前的版本進(jìn)行驅(qū)動(dòng)降級(jí)

環(huán)境配置將360隨身Wi-Fi插入電腦的USB接口,下載并安裝360隨身Wi-Fi驅(qū)動(dòng)打開(kāi)【網(wǎng)絡(luò)和共享中心】窗口安裝分析軟件從官網(wǎng)下載Wireshark軟件的安裝包,依據(jù)電腦操作系統(tǒng)的類(lèi)型選擇相應(yīng)的安裝包,通過(guò)【系統(tǒng)】窗口可查看操作系統(tǒng)的類(lèi)型Wireshark安裝雙擊安裝文件,打開(kāi)安裝界面,如圖2.5所示,單擊【Next】按鈕出現(xiàn)許可頁(yè)面,單擊【IAgree】按鈕,在打開(kāi)的對(duì)話(huà)框中選擇需要安裝的內(nèi)容,隨后依次單擊【Next】按鈕完成Wireshark軟件的安裝。

數(shù)據(jù)采集打開(kāi)Wireshark軟件,如圖2.6所示。找到360隨身Wi-Fi提供的網(wǎng)絡(luò)(本例中是本地連接*6),右邊對(duì)應(yīng)了一條波浪線(xiàn),顯示了Wireshark軟件獲取了360隨身Wi-Fi網(wǎng)絡(luò)中手機(jī)APP進(jìn)行網(wǎng)絡(luò)處理的數(shù)據(jù)包。信息顯示單擊Wireshark軟件工具欄中的按鈕,或者雙擊360隨身Wi-Fi的網(wǎng)絡(luò)選項(xiàng)【本地連接*6】,可以顯示W(wǎng)ireshark軟件監(jiān)視到的各種數(shù)據(jù)數(shù)據(jù)包的存儲(chǔ)操作手機(jī)APP,使之產(chǎn)生網(wǎng)絡(luò)傳輸數(shù)據(jù)。單擊Wireshark軟件的【文件】菜單,選擇【導(dǎo)出分組解析結(jié)果】命令,可以將數(shù)據(jù)保存為純文本、CSV或C語(yǔ)言數(shù)組等常見(jiàn)格式。同步操作打開(kāi)TotalControl網(wǎng)站,如圖2.10所示同步操作單擊網(wǎng)站右下方的【立即下載】按鈕,下載TotalControl軟件,得到安裝文件。雙擊TotalControl的安裝文件,進(jìn)入安裝向?qū)?duì)話(huà)框。

同步操作運(yùn)行TotalControl軟件,若手機(jī)已經(jīng)采用USB線(xiàn)與電腦連接,則TotalControl軟件會(huì)在電腦屏幕上模擬一個(gè)手機(jī)屏幕,否則會(huì)出現(xiàn)同步操作連接成功后的畫(huà)面小結(jié)數(shù)據(jù)收集是大數(shù)據(jù)測(cè)試的基礎(chǔ),可以通過(guò)不同的方式來(lái)進(jìn)行數(shù)據(jù)收集。大體上這些方式可以分為主動(dòng)式和被動(dòng)式。目前多數(shù)企業(yè)采用的是被動(dòng)式收集方式,即需要用戶(hù)填寫(xiě)一些相關(guān)材料等。本章演示了如何采用Wireshark軟件來(lái)獲取手機(jī)APP軟件訪(fǎng)問(wèn)網(wǎng)絡(luò)的數(shù)據(jù),重點(diǎn)介紹了采用360隨身Wi-Fi與電腦連接時(shí)的環(huán)境設(shè)置及Wireshark軟件進(jìn)行數(shù)據(jù)收集時(shí)的常規(guī)做法。第三章:網(wǎng)絡(luò)數(shù)據(jù)的采集與分析內(nèi)容物理連接常用操作數(shù)據(jù)包的采集數(shù)據(jù)包的自動(dòng)抓取數(shù)據(jù)包分析小結(jié)物理連接將手機(jī)、360隨身Wi-Fi、電腦進(jìn)行連接Wireshark軟件的打開(kāi)方式1)在電腦桌面找到并雙擊【W(wǎng)ireshark】圖標(biāo)2)在Windows10操作系統(tǒng)的【開(kāi)始】菜單右側(cè)的【Cortana】文本框中輸入Wireshark后按【Enter】鍵3)在【開(kāi)始】菜單中找到并單擊Wireshark應(yīng)用選項(xiàng)自由切換中英文界面左鍵單擊編輯菜單【Edit】,找中屬性子菜單【Preference…】,出現(xiàn)下圖構(gòu)建網(wǎng)絡(luò)右擊電腦桌面的【網(wǎng)絡(luò)連接】圖標(biāo),打開(kāi)【網(wǎng)絡(luò)和共享中心】窗口,如圖所示。上面的是本地網(wǎng)絡(luò)下面的是360隨身Wi-Fi構(gòu)建的網(wǎng)絡(luò)其網(wǎng)絡(luò)名稱(chēng)是WLAN注意:每一次用360隨身Wi-Fi構(gòu)建的網(wǎng)絡(luò)名稱(chēng)都會(huì)變化Wireshark軟件功能介紹雙擊360隨身Wi-Fi構(gòu)建的網(wǎng)絡(luò)WLAN,進(jìn)入Wireshark捕獲的數(shù)據(jù)窗口數(shù)據(jù)包的采集TotalControl軟件打開(kāi)TotalControl軟件,將手機(jī)操作同步到電腦端,顯示效果如圖所示。TotalControl軟件雙擊Wireshark中的360隨身WIFI網(wǎng)絡(luò),開(kāi)始捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包,如圖所示TotalControl軟件移動(dòng)鼠標(biāo),打開(kāi)手機(jī)上的同花順APP,點(diǎn)擊該APP中的【自選】菜單,產(chǎn)生同花順訪(fǎng)問(wèn)網(wǎng)絡(luò)的數(shù)據(jù)。隨后,Wireshark就能獲取同花順訪(fǎng)問(wèn)網(wǎng)絡(luò)的所有數(shù)據(jù)流量包,如圖所示。TotalControl軟件持續(xù)操作同花順APP,不斷地產(chǎn)生新的數(shù)據(jù)包被Wireshark軟件捕獲。在操作過(guò)程中,同花順突然出現(xiàn)了網(wǎng)絡(luò)請(qǐng)求超時(shí)錯(cuò)誤,這次網(wǎng)絡(luò)訪(fǎng)問(wèn)失效同樣被Wireshark捕獲,如圖所示。數(shù)據(jù)的存儲(chǔ)和打開(kāi)單擊Wireshark軟件操作界面工具欄中的

按鈕,停止網(wǎng)絡(luò)數(shù)據(jù)包的收集,如圖所示。數(shù)據(jù)的存儲(chǔ)和打開(kāi)單擊【File】菜單,選擇【Saveas】命令,如圖所示。數(shù)據(jù)的存儲(chǔ)和打開(kāi)隨后將數(shù)據(jù)包另存為appnetdata.pcapng文件,如圖所示。數(shù)據(jù)的存儲(chǔ)和打開(kāi)雙擊pcap文件路徑,可打開(kāi)該文件。數(shù)據(jù)包的自動(dòng)抓取為了大量獲取這些數(shù)據(jù)包,手動(dòng)開(kāi)啟\關(guān)閉WLAN的方式是不適合的,需要編寫(xiě)腳本實(shí)現(xiàn)批量數(shù)據(jù)包的獲取。在電腦端打開(kāi)TotalControl軟件,選擇連接手機(jī),出現(xiàn)兩個(gè)窗口,其中左邊的一個(gè)窗口是手機(jī)的界面,右邊窗口是TotalControl的主操作界面,如圖所示。

腳本錄制單擊工具欄中的【腳本操作】按鈕,在其下方會(huì)出現(xiàn)一排功能按鈕,如圖所示。腳本錄制單擊錄制按鈕,出現(xiàn)腳本錄制窗口,如圖所示;

腳本錄制在【腳本名稱(chēng)】文本框中輸入“WIFI”,在【腳本描述】文本框中輸入“在TotalControl中錄制腳本”,單擊【確定】按鈕,出現(xiàn)錄制過(guò)程界面,如圖所示。

腳本錄制在手機(jī)端找到【設(shè)置】選項(xiàng),關(guān)閉【無(wú)線(xiàn)網(wǎng)絡(luò)】功能,TotalControl錄制相關(guān)的腳本,如圖所示。

腳本錄制在手機(jī)端開(kāi)啟【無(wú)線(xiàn)網(wǎng)絡(luò)】功能,相隔若干時(shí)間后重復(fù)這兩個(gè)操作,再單擊TotalControl操作窗口頂部的按鈕,停止腳本錄制,出現(xiàn)新窗口如圖所示。腳本錄制在圖中可以看到一個(gè)腳本文件“WIFI.js”,選中這個(gè)文件,單擊【腳本管理】按鈕,彈出【腳本管理】窗口,如圖所示。腳本錄制在【腳本管理器】窗口的左側(cè)窗口的【名稱(chēng)】列表框中選中【W(wǎng)IFI.js】文件,可以在右側(cè)窗格看到腳本的具體內(nèi)容。在腳本的最后增加如下代碼,該行的目的是實(shí)現(xiàn)操作延時(shí),可讓手機(jī)連接WLAN和手機(jī)APP進(jìn)行網(wǎng)絡(luò)連接的時(shí)間是10秒。device.delay(10000);單擊【保存】按鈕,再單擊按鈕關(guān)閉窗口。腳本執(zhí)行在TotalControl軟件的主界面單擊執(zhí)行按鈕,窗口將顯示腳本執(zhí)行次數(shù),如圖所示。腳本執(zhí)行修改腳本的執(zhí)行次數(shù)為10次,單擊【確定】按鈕,自動(dòng)執(zhí)行腳本,如圖3.24所示。腳本執(zhí)行在腳本自動(dòng)執(zhí)行過(guò)程中,TotalControl軟件會(huì)依據(jù)腳本再次操作手機(jī),通過(guò)Wireshark軟件可自動(dòng)獲得網(wǎng)絡(luò)訪(fǎng)問(wèn)數(shù)據(jù)包。數(shù)據(jù)包分析利用手機(jī)端的同花順APP進(jìn)行網(wǎng)絡(luò)訪(fǎng)問(wèn)時(shí),在網(wǎng)絡(luò)進(jìn)行切換,或者由不可用網(wǎng)絡(luò)到可用網(wǎng)絡(luò)時(shí),如何通過(guò)數(shù)據(jù)分析探測(cè)手機(jī)同花順APP連通網(wǎng)絡(luò)的速度?通過(guò)在手機(jī)端開(kāi)關(guān)無(wú)線(xiàn)網(wǎng)絡(luò),可獲取手機(jī)在網(wǎng)絡(luò)連通時(shí)的時(shí)間t1,隨后再獲取同花順APP連通網(wǎng)絡(luò)的時(shí)間t2,利用t2-t1即可以知道這款A(yù)PP訪(fǎng)問(wèn)網(wǎng)絡(luò)的時(shí)間延時(shí)。但是如何判斷一款手機(jī)APP訪(fǎng)問(wèn)網(wǎng)絡(luò)的性能呢?答案是采用同類(lèi)型的APP作對(duì)比,就可以獲得一款手機(jī)APP訪(fǎng)問(wèn)網(wǎng)絡(luò)的性能。數(shù)據(jù)獲取采用Wireshark軟件來(lái)捕獲手機(jī)網(wǎng)絡(luò)中的數(shù)據(jù)包,同時(shí)打開(kāi)手機(jī)端的同花順APP,獲取相關(guān)的網(wǎng)絡(luò)訪(fǎng)問(wèn)數(shù)據(jù),如圖所示。數(shù)據(jù)獲取在手機(jī)端關(guān)閉WLAN,此時(shí)Wireshark軟件獲得網(wǎng)絡(luò)中的數(shù)據(jù)包在減緩,如圖所示。數(shù)據(jù)獲取隨后,再次打開(kāi)手機(jī)端WLAN,Wireshark軟件捕獲的網(wǎng)絡(luò)數(shù)據(jù)包在增加,如圖所示。數(shù)據(jù)獲取接著,單擊同花順APP中的【自選】按鈕,可以看到同花順APP正在連接網(wǎng)絡(luò)服務(wù)器,如圖所示數(shù)據(jù)獲取當(dāng)該APP連通網(wǎng)絡(luò)后,Wireshark軟件捕獲了更多的網(wǎng)絡(luò)數(shù)據(jù)包,如圖所示。數(shù)據(jù)獲取重復(fù)上述過(guò)程,此時(shí)同花順APP會(huì)自動(dòng)連接網(wǎng)絡(luò),傳輸數(shù)據(jù)包。通過(guò)周期性地打開(kāi)和關(guān)閉手機(jī)端的WLAN,利用Wireshark抓取同花順APP產(chǎn)生的數(shù)據(jù)包獲取大量的數(shù)據(jù)樣本,即可統(tǒng)計(jì)和分析同花順APP的網(wǎng)絡(luò)訪(fǎng)問(wèn)時(shí)間。最后停止Wireshark軟件的數(shù)據(jù)抓取,保存網(wǎng)絡(luò)訪(fǎng)問(wèn)數(shù)據(jù)。數(shù)據(jù)包的大小在Wireshark軟主界面雙擊打開(kāi)已保存的數(shù)據(jù)包文件,在Wireshark主界面底部的狀態(tài)欄中可以查看到數(shù)據(jù)包的大小是2212個(gè),如圖所示。數(shù)據(jù)分析由于Wireshark軟件抓取的是網(wǎng)卡上的數(shù)據(jù),因此需要從中過(guò)濾出同花順APP產(chǎn)生的網(wǎng)絡(luò)數(shù)據(jù)。需要從數(shù)據(jù)包中分析出兩類(lèi)數(shù)據(jù),一類(lèi)是手機(jī)連通WLAN的數(shù)據(jù);另一類(lèi)是同花順APP連通服務(wù)器的數(shù)據(jù)。數(shù)據(jù)分析在【應(yīng)用顯示過(guò)濾器】文本框中輸入icmpv6.type==135,如圖所示,按【Enter】鍵,即可獲取手機(jī)連通網(wǎng)絡(luò)的數(shù)據(jù)包。數(shù)據(jù)分析獲取同花順APP連接服務(wù)器的數(shù)據(jù)相對(duì)而言要難一些,由于同花順APP連接服務(wù)器采用了Socket協(xié)議,且【自選】股票的數(shù)據(jù)是由服務(wù)器端向手機(jī)端推送(push)的,因此可以在數(shù)據(jù)包列表中找到推送數(shù)據(jù)包(在Wireshark軟件的數(shù)據(jù)包列表中縮寫(xiě)是PSH),在詳細(xì)信息窗口可以看到相關(guān)的信息,其中連接的目的端口是9528,如圖所示。數(shù)據(jù)分析下面需要將端口是9528的數(shù)據(jù)包找出來(lái),右擊數(shù)據(jù)組信息中的【DestinatienPort:952】(目的端口:9528)代碼行,選擇【ApplyasFilter】→【Selected】命令,如圖所示。數(shù)據(jù)分析在【Info】欄中選擇SYN數(shù)據(jù),再在數(shù)據(jù)包的詳細(xì)信息中右擊帶有【SYN】標(biāo)識(shí)的行,選擇【ApplyasFilter】→【…andSelected】命令,如圖所示。數(shù)據(jù)分析獲得相關(guān)數(shù)據(jù)包,如圖所示。數(shù)據(jù)分析再次增加手機(jī)尋址的過(guò)濾條件,最后構(gòu)造的復(fù)合過(guò)濾條件是“icmpv6.type==135or(tcp.dstport==9528andtcp.flags.syn==1)”,其結(jié)果顯示在圖中,選出的有用數(shù)據(jù)包為10組。數(shù)據(jù)分析觀察這10組數(shù)據(jù)包,協(xié)議【Protocol】為icmpv6表示開(kāi)啟手機(jī)中的WLAN網(wǎng)絡(luò),協(xié)議【Protocol】為T(mén)CP,【Info】欄中有[SYN]標(biāo)識(shí),表示服務(wù)器端推送數(shù)據(jù)到手機(jī)同花順APP上。數(shù)據(jù)分析本次實(shí)驗(yàn)總共進(jìn)行了3次開(kāi)關(guān)WLAN的操作,產(chǎn)生了3次服務(wù)器端向同花順APP傳輸數(shù)據(jù)包的操作。右擊協(xié)議Protocol為ICMPV6的數(shù)據(jù)包,彈出菜單,選擇【Set/UnsetTimeReference】命令,如圖所示。數(shù)據(jù)分析時(shí)間信息會(huì)顯示在圖所示的窗口中手機(jī)3次WLAN連接的時(shí)間分別為6.881769、6.247836和5.808334。數(shù)據(jù)分析再選中【Info】欄中包含【SYN】標(biāo)識(shí)的數(shù)據(jù)包,執(zhí)行上述操作,獲得服務(wù)器端向同花順APP推送數(shù)據(jù)包的時(shí)間,結(jié)果如圖所示。小結(jié)介紹了Wireshark軟件獲取手機(jī)同花順APP訪(fǎng)問(wèn)網(wǎng)絡(luò)的數(shù)據(jù)、編寫(xiě)Wireshark的代碼實(shí)現(xiàn)數(shù)據(jù)的約簡(jiǎn)以及批量網(wǎng)絡(luò)數(shù)據(jù)采集的方法。本章重點(diǎn)運(yùn)用網(wǎng)絡(luò)知識(shí)來(lái)分析APP的聯(lián)網(wǎng)訪(fǎng)問(wèn)數(shù)據(jù);依據(jù)分析結(jié)果來(lái)編寫(xiě)相關(guān)的Wireshark代碼,最終過(guò)濾出有效的數(shù)據(jù)包;再?gòu)倪@些數(shù)據(jù)包中查看手機(jī)聯(lián)網(wǎng)時(shí)間及APP聯(lián)網(wǎng)時(shí)間之差,獲取APP聯(lián)網(wǎng)的效率。第四章:數(shù)據(jù)格式轉(zhuǎn)換及Python編程內(nèi)容原理及方法基礎(chǔ)概念Python安裝及配置Python基礎(chǔ)學(xué)習(xí)Notepad環(huán)境Python編程實(shí)踐Python面向?qū)ο驪ython的集成開(kāi)發(fā)環(huán)境pcapng文件到CSV文件小結(jié)原理及方法通過(guò)Wireshark軟件導(dǎo)出手機(jī)APP訪(fǎng)問(wèn)網(wǎng)絡(luò)的數(shù)據(jù)包(格式為*.pcapng),然后在Python中編程,將*.pcapng文件轉(zhuǎn)換為CSV格式的文件。為了實(shí)現(xiàn)這個(gè)目的,首先需要下載安裝pyshark軟件安裝包,以便于Python對(duì)pcapng文件的處理;還需要下載安裝VisualC++2015BuildTools,因?yàn)閜yshark軟件安裝包需要調(diào)用這個(gè)工具。pyshark介紹pyshark能從網(wǎng)絡(luò)接口中進(jìn)行數(shù)據(jù)嗅探,或者對(duì)存儲(chǔ)的pcap文件進(jìn)行分析和處理,在pyshark的官方主頁(yè)文檔內(nèi)容如下。pyshark介紹1)使用LiveCapture或者FileCapture方法建立Capture對(duì)象后,在捕獲(capture)和數(shù)據(jù)包(packet)層面就會(huì)有多個(gè)方法和屬性可用。利用PyShark可以調(diào)用tshark內(nèi)建的所有數(shù)據(jù)包解碼器。2)獲取數(shù)據(jù)包摘要的代碼如下。3)按層深入獲取數(shù)據(jù)包屬性如下所述。pyshark介紹pyshark介紹4)遍歷數(shù)據(jù)包,對(duì)每個(gè)數(shù)據(jù)包使用給定函數(shù)處理如下。FileCapture和LiveCapturepyshark中通常使用FileCapture和LiveCapture模塊進(jìn)行數(shù)據(jù)包分析FileCapture模塊從一個(gè)存儲(chǔ)的捕獲文件中導(dǎo)入數(shù)據(jù)包;LiveCapture模塊將使用本機(jī)的網(wǎng)絡(luò)接口進(jìn)行嗅探。這兩個(gè)模塊的具體應(yīng)用詳見(jiàn)本書(shū)的35-37頁(yè)。Python基礎(chǔ)語(yǔ)法在Python中,所有標(biāo)識(shí)符可以包括英文、數(shù)字以及下劃線(xiàn)(_),但不能以數(shù)字開(kāi)頭。Python中的標(biāo)識(shí)符是區(qū)分大小寫(xiě)的。以下劃線(xiàn)開(kāi)頭的標(biāo)識(shí)符是有特殊意義的,以單下劃線(xiàn)開(kāi)頭,代表不能直接訪(fǎng)問(wèn)的類(lèi)屬性,需通過(guò)類(lèi)提供的接口進(jìn)行訪(fǎng)問(wèn),不能用fromxxximport*導(dǎo)入;以雙下劃線(xiàn)開(kāi)頭,代表類(lèi)的私有成員;以雙下劃線(xiàn)開(kāi)頭和結(jié)尾,是Python里特殊方法專(zhuān)用的標(biāo)識(shí)。Python可以同一行顯示多條語(yǔ)句,但需用分號(hào);分開(kāi)。Python的代碼塊不使用大括號(hào){}來(lái)控制類(lèi)、函數(shù)以及其他邏輯判斷,而是采用縮進(jìn)來(lái)區(qū)分模塊。縮進(jìn)的空格數(shù)量是可變的,但是同一代碼塊中的語(yǔ)句必須包含相同的縮進(jìn)空格數(shù)量,這個(gè)必須嚴(yán)格執(zhí)行。Python安裝及配置打開(kāi)Python安裝網(wǎng)址,選擇【Downloads】→【W(wǎng)indows】命令,在打開(kāi)的界面中選中并下載Python3.6.2。雙擊下載完成的文件Python3.6.2.exe,按照提示逐步安裝。配置在Windows系統(tǒng)的【開(kāi)始】菜單中選擇【運(yùn)行】命令,在文本框中輸入cmd,啟動(dòng)命令行窗口,輸入python后按【Enter】鍵,或者在python的安裝目錄中運(yùn)行python.exe文件,顯示如圖所示。如果沒(méi)有出現(xiàn),則是環(huán)境變量出了問(wèn)題。配置設(shè)置環(huán)境變量的方法是:打開(kāi)【系統(tǒng)屬性】對(duì)話(huà)框,選中【高級(jí)】選項(xiàng)卡,如圖所示;配置單擊【環(huán)境變量】按鈕,打開(kāi)【環(huán)境變量】對(duì)話(huà)框,如圖所示;配置將安裝好的目錄加入Path列表框中,如“C:\User\Python\Python36-32

;”。如果是Windows10操作系統(tǒng),則不需要增加最后的“;”;如果是其他Windows操作系統(tǒng),則必須要加上“;”。配置好后,則可以在命令窗口中輸入python,顯示Python的版本信息。

注意:如果安裝了多個(gè)版本的Python,則需要為它們分別配置環(huán)境變量,同時(shí)更改相應(yīng)python.exe為python2.exe和python3.exe。pyshark包下載在Python官網(wǎng)主頁(yè)的頂部單擊PyPI(PythonPackageIndex,Python包索引)超鏈接,在頁(yè)面右上角的【搜索】欄中輸入“Pyshark”查找這個(gè)包,找到pyshark包并下載(該包的作用是讓Python能夠解析Wireshark文件),下載過(guò)程如圖所示。pyshark包安裝為了安裝pyshark包,進(jìn)入網(wǎng)站/KimiNewt/pyshark,找到下方的【Installation】選項(xiàng)欄,如圖所示。pyshark包安裝由安裝文件可以看出,安裝方式有兩種,其一是采用如下命令。pipinstallpyshark其二是從git的庫(kù)中安裝,從網(wǎng)址/KimiNewt/pyshark.git中獲取pyshark.git,再執(zhí)行命令,示例代碼如下:cdpyshark/srcpythonsetup.pyinstall然后,在命令行窗口中輸入命令quit(),退出Python。再采用cd命令進(jìn)入pipinstallpyshark,如果不能安裝,則采用python-mpipinstallpyshark來(lái)代替安裝。安裝支撐文件如果用戶(hù)沒(méi)有安裝VisualC++2015BuildTools,則還需要先安裝這個(gè)工具。打開(kāi)網(wǎng)址/visual-cpp-build-tools,下載并安裝VisualC++2015BuildTools,安裝界面如圖所示。安裝支撐文件最終PyShark安裝成功后會(huì)出現(xiàn)提示信息Finishedprocessingdependenciesforpyshark==,如圖所示。Python基礎(chǔ)學(xué)習(xí)Python的命令行演示創(chuàng)建并運(yùn)行.py文件Python出錯(cuò)演示Python注釋一行多語(yǔ)句輸出換行縮進(jìn)Python幫助Python的命令行演示打開(kāi)命令行窗口,輸入Python,即可顯示版本信息。輸入print(“Hello,world!”)后按【Enter】鍵(注意:Python3版本與Python2版本不同,Python2版本無(wú)須括號(hào)),命令行窗口中會(huì)輸出“Hello,world!”,如圖所示。創(chuàng)建并運(yùn)行.py文件在Windows操作系統(tǒng)桌面新建一個(gè)test.txt文件,將“print(“Hello,world!”)”代碼行復(fù)制進(jìn)去,再更改這個(gè)文件的后綴名為.py。在命令行窗口中輸入quit()退出Python環(huán)境,采用cd命令進(jìn)入桌面目錄,如cd

C:\Users\用戶(hù)名\Desktop,再輸入Pythontest.py,運(yùn)行這個(gè)文件,即可在命令行窗口中顯示“Hello,world!”。Python出錯(cuò)演示采用記事本打開(kāi)文件test.py,在尾部添加如下代碼。ifTrue:print("Question")print("True")else:print("Answer")print("False")#未對(duì)齊的位置這段代碼會(huì)出現(xiàn)什么樣的錯(cuò)誤提示呢?Python出錯(cuò)演示代碼并沒(méi)有嚴(yán)格遵循縮進(jìn)格式,因此在命令行窗口中輸入pythontest.py后按【Enter】鍵,會(huì)顯示錯(cuò)誤信息“IndentationError:unindentdoesnotmatchanyouterindentationlevel”,如圖所示。Python注釋在test.py文件頭部添加注釋格式如“#文件名:test.py”,在文件尾部增加多行注釋的代碼。Python中的多行注釋采用了3個(gè)單引號(hào)(''')或3個(gè)雙引號(hào)(""")。例如:'''這是多行注釋?zhuān)蛔⑨寖?nèi)容1;注釋內(nèi)容2;'''"""這同樣是多行注釋?zhuān)蛔⑨寖?nèi)容。"""一行多語(yǔ)句Python可以在同一行中使用多條語(yǔ)句,語(yǔ)句之間使用分號(hào)(;)分隔。例如:importsys;x='runoob';sys.stdout.write(x+'\n')輸出結(jié)果是什么?運(yùn)行test.py程序,將在命令行窗口中輸出runoob。輸出換行Python3中的print命默認(rèn)輸出是換行的,如果要實(shí)現(xiàn)不換行,需要改變語(yǔ)句print('contents',end='!@#$%^&*')中的默認(rèn)換行屬性。其中end就表示print將如何結(jié)束,默認(rèn)為end="\n"(換行)。例如:x="a"y="b"#換行輸出print(x)print(y)print('---------')#不換行輸出print(x,end='')print(y)縮進(jìn)縮進(jìn)空格數(shù)目相同的一組語(yǔ)句構(gòu)成一個(gè)代碼塊,也稱(chēng)為代碼組。像if、while、def和class這樣的復(fù)合語(yǔ)句,首行以關(guān)鍵字開(kāi)始,以冒號(hào)(:)結(jié)束,該行之后的一行或多行代碼即構(gòu)成代碼組,而首行及后面的代碼組稱(chēng)為一個(gè)子句(clause)。Python幫助在命令行窗口中輸入python版本號(hào)–h,后按【Enter】鍵,將顯示相應(yīng)版本python各參數(shù)的幫助信息,如圖所示。Notepad環(huán)境Notepad++軟件運(yùn)行設(shè)置多個(gè)變量賦值Python的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型刪除Python語(yǔ)言的運(yùn)算符Python條件語(yǔ)句N(xiāo)otepad++軟件在命令行窗口中編寫(xiě)程序是不方便的,為此可以使用Notepad++軟件來(lái)編寫(xiě)Python代碼。上網(wǎng)下載Notepad++軟件并安裝,Notepad的開(kāi)發(fā)環(huán)境如圖所示。運(yùn)行設(shè)置為了能夠在Notepad中運(yùn)行Python程序,需要對(duì)Notepad進(jìn)行設(shè)置,具體步驟如下所述。步驟1:?jiǎn)?dòng)Notepad++,選擇【運(yùn)行】命令。運(yùn)行設(shè)置步驟2:彈出【運(yùn)行】對(duì)話(huà)框,在文本框中輸入“cmd/kpython”$(FULL_CURRENT_PATH)“&PAUSE&EXIT”,單擊【保存】按鈕。運(yùn)行設(shè)置如果安裝了多個(gè)Python版本,python.exe需改為python3.exe,即輸入“cmd/kpython3"$(FULL_CURRENT_PATH)"&PAUSE&EXIT”。運(yùn)行設(shè)置步驟3:彈出【Shertcut】對(duì)話(huà)框,在【Name】文本框中輸入“runpython”作為名稱(chēng),選擇快捷鍵為【Ctrl+Shift+0】,單擊【OK】按鈕。運(yùn)行設(shè)置步驟4:返回Notepad主界面直接按【F5】鍵或者選擇【run】→【runpython】命令,即可直接調(diào)試Python程序,運(yùn)行結(jié)果如圖所示。多個(gè)變量賦值Python允許同時(shí)為多個(gè)變量賦值。例如如下語(yǔ)句,功能即創(chuàng)建一個(gè)整型對(duì)象,值為8,三個(gè)變量被分配到相同的內(nèi)存空間上。a=b=c=8為創(chuàng)建兩個(gè)整型對(duì)象1和2分配給變量a和b,字符串對(duì)象

“Mike”分配給變量c,則a,b,c=1,2,"Mike"Python的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型Python有5個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類(lèi)型,分別為Numbers(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Dictionary(字典)?!緮?shù)字】類(lèi)型,用于存儲(chǔ)數(shù)值,是不可改變的數(shù)據(jù)類(lèi)型,改變【數(shù)字】類(lèi)型,Python會(huì)分配一個(gè)新的對(duì)象。(1)Python的字符串是由數(shù)字、字母、下劃線(xiàn)組成的一串字符。Python的字串列表有兩種取值順序,其一從左到右索引默認(rèn)從0開(kāi)始,最大范圍是字符串長(zhǎng)度減1。例如,對(duì)于s=mypython,則s[0]的結(jié)果是字符m。

其二從右到左索引默認(rèn)從-1開(kāi)始,最大范圍是字符串開(kāi)頭字符的

位置。例如,對(duì)于s=lovepython,則s[-1]的結(jié)果是字符n。Python的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型要實(shí)現(xiàn)從字符串中獲取一段子字符串,可以使用的語(yǔ)句格式為“變量[頭下標(biāo):尾下標(biāo)]”,其中頭下標(biāo)是從0開(kāi)始算起,可以是正數(shù)或負(fù)數(shù);頭下標(biāo)

可以為空,表示取到頭或尾。

在Notepad中編寫(xiě)如下代碼,按【F5】鍵運(yùn)行,顯示結(jié)果如圖所示。str='HelloWorld!'print(str) #輸出完整字符串print(str[0]) #輸出字符串中的第一個(gè)字符print(str[2:5]) #輸出字符串中第三個(gè)至第五個(gè)之間的字符串print(str[2:]) #輸出從第三個(gè)字符開(kāi)始的字符串print(str*2) #輸出字符串兩次print(str+"TEST") #輸出連接的字符串(2)Python元組用()標(biāo)識(shí),內(nèi)部元素用逗號(hào)隔開(kāi)。但是元組不能二次賦值,相當(dāng)于只讀列表。tuple=('runoob',786,2.23,'john',70.2)tinytuple=(123,'john')print(tuple) #輸出完整元組print(tuple[0]) #輸出元組的第一個(gè)元素print(tuple[1:3]) #輸出第二個(gè)至第三個(gè)的元素

print(tuple[2:]) #輸出從第三個(gè)開(kāi)始至列表末尾的所有元素print(tinytuple*2) #輸出元組兩次print(tuple+tinytuple) #打印組合的元組(3)元組是不允許更新的,列表是允許更新的。在Notepad中輸入如下代碼,運(yùn)行代碼將顯示錯(cuò)誤信息:“‘tuple’objectdoesnotsupportitemassignment”,輸出結(jié)果如圖所示。tuple=('runoob',786,2.23,'john',70.2)list=['runoob',786,2.23,'john',70.2]tuple[2]=1000 #元組中是非法應(yīng)用list[2]=1000 #列表中是合法應(yīng)用(4)Python字典(dictionary)是一種靈活的內(nèi)置數(shù)據(jù)結(jié)構(gòu)類(lèi)型,列表是有序的對(duì)象集合,字典是無(wú)序的對(duì)象集合。兩者之間的區(qū)別在于,字典當(dāng)中的元素是通過(guò)鍵來(lái)存取的,而不是通過(guò)偏移存取。字典用{}標(biāo)識(shí),由索引(key)和它對(duì)應(yīng)的值value組成。例如在Notepad中輸入如下代碼,按【F5】鍵運(yùn)行:dict={} #定義字典dictdict['one']="Thisisone" #字典中one的值dict[2]="Thisistwo" #字典中2的值tinydict={'name':'john','code':6734,'dept':'sales'}#定義字典print(dict['one']) #輸出鍵為'one'的值print(dict[2]) #輸出鍵為2的值print(tinydict) #輸出完整的字典print(tinydict.keys()) #輸出所有鍵print(tinydict.values()) #輸出所有值(5)Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換。Python支持不同數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。刪除采用del語(yǔ)句可以刪除單個(gè)或多個(gè)對(duì)象的引用,語(yǔ)句格式如下。delvardelvar_a,var_bPython語(yǔ)言的運(yùn)算符Python的一些通常運(yùn)算符與其他語(yǔ)言是類(lèi)似的,如有需要可以參考其他語(yǔ)言。本小節(jié)僅僅介紹Python的一些特殊運(yùn)算符,具體如下。(1)冪運(yùn)算**:返回x的y次冪,例如如下示例,輸出結(jié)果是16。a=2;b=4#2的4次方a**4Python語(yǔ)言的運(yùn)算符(2)取整除//-:返回商的整數(shù)部分,例如如下示例,輸出結(jié)果是4.0。9.0//2.0(3)Python邏輯運(yùn)算符①xandy:布爾與,如果x為False,返回False;否則返回y的計(jì)算值。②xory:布爾或,如果x是非0,它返回x的值;否則返回y的計(jì)算值。③notx:布爾非,如果x為T(mén)rue,返回False;否則返回True。Python語(yǔ)言的運(yùn)算符(4)Python成員運(yùn)算符ainlist:a在序列l(wèi)ist中找到值返回True,否則返回False。anotinlist:a在序列l(wèi)ist中沒(méi)有找到值返回True,否則返回False。(5)Python身份運(yùn)算符xisy:如果x和y引用的是同一個(gè)對(duì)象,則返回True;否則返回Falsexisnoty:如果x和y引用的不是同一個(gè)對(duì)象,則返回結(jié)果True;否則返回False。is與==區(qū)別在于,is用于判斷兩個(gè)變量引用對(duì)象是否為同一個(gè),==用于判斷引用變量的值是否相等。例如在Notepad中輸入如下代碼,運(yùn)行程序,輸出分別是True、True、False、True。a=[1,2,3]b=aprint(bisa)#Trueprint(b==a)#Trueb=a[:]print(bisa)#Falseprint(b==a)#TruePython中會(huì)為每個(gè)出現(xiàn)的對(duì)象分配內(nèi)存,哪怕它們的值完全相等(注意,是相等,不是相同)。如執(zhí)行a=2.0、b=2.0這兩個(gè)語(yǔ)句,會(huì)先后為2.0這個(gè)兩Float類(lèi)型對(duì)象分配內(nèi)存,然后將a與b分別指向這兩個(gè)對(duì)象,所以a與b指向的不是同一對(duì)象,代碼如下。a=2.0b=2.0print(aisb) #結(jié)果為Falseprint(a==b) #結(jié)果為T(mén)rue為了提高內(nèi)存利用效率,對(duì)于一些簡(jiǎn)單的對(duì)象,如一些數(shù)值較小的int對(duì)象,Python采取重用對(duì)象內(nèi)存的辦法,如指向a=2、b=2時(shí),由于2作為簡(jiǎn)單的int類(lèi)型且數(shù)值小,Python不會(huì)兩次為其分配內(nèi)存,而是只分配一次,然后將a與b同時(shí)指向已分配的對(duì)象,示例代碼如下。a=2b=2print(aisb) #結(jié)果為T(mén)rueprint(a==b) #結(jié)果為T(mén)rue但如果賦的值不是2,而是大的數(shù)值,情況就跟前面的一樣了,示例代碼如下。a=6666b=6666print(aisb) #結(jié)果為Falseprint(a==b) #結(jié)果為T(mén)rue變量寫(xiě)在同一行,將會(huì)指向同一個(gè)對(duì)象,如:a=6666;b=6666; #寫(xiě)在同一行print(a==b) #結(jié)果為T(mén)rue但是,寫(xiě)在Notepad中時(shí),不管是否同一行,都是指向同一個(gè)地址。Python條件語(yǔ)句if判斷條件:

執(zhí)行語(yǔ)句…else:

執(zhí)行語(yǔ)句…其中,python復(fù)合布爾表達(dá)式計(jì)算采用短路規(guī)則,即如果通過(guò)前面的部分已經(jīng)計(jì)算出整個(gè)表達(dá)式的值,則后面的部分不再計(jì)算。Python條件語(yǔ)句例如如下代碼將正常執(zhí)行,不會(huì)報(bào)除零錯(cuò)誤。a=0b=1if(a>0)and(b/a>2):#a>0不滿(mǎn)足,則b/a>2不會(huì)執(zhí)行,因此不會(huì)產(chǎn)生除零錯(cuò)誤print("yes“)else:print("no“)Python編程實(shí)踐漢諾塔問(wèn)題奇偶數(shù)分離Python中in的應(yīng)用循環(huán)使用else語(yǔ)句編程漢諾塔問(wèn)題漢諾塔問(wèn)題是一個(gè)經(jīng)典的問(wèn)題。漢諾塔(HanoiTower)又稱(chēng)河內(nèi)塔,源于印度一個(gè)古老傳說(shuō)。大梵天創(chuàng)造世界的時(shí)候做了3根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤(pán)。大梵天命令婆羅門(mén)把圓盤(pán)從下面開(kāi)始按大小順序重新擺放在另一根柱子上。并且規(guī)定,任何時(shí)候,在小圓盤(pán)上面都不能放大圓盤(pán),且在3根柱子之間一次只能移動(dòng)一個(gè)圓盤(pán)。問(wèn)應(yīng)該如何操作?請(qǐng)?jiān)贜otepad中編寫(xiě)如下Python代碼即可解決問(wèn)題。#一個(gè)簡(jiǎn)單的條件語(yǔ)句實(shí)現(xiàn)漢諾塔問(wèn)題defmove(n,a,b,c): #定義一個(gè)函數(shù)moveifn==1:print(a,'-->',c)else:move(n-1,a,c,b) #將前n-1個(gè)盤(pán)子從a移動(dòng)到b上

move(1,a,b,c) #將最底下的最后一個(gè)盤(pán)子從a移動(dòng)到c上

move(n-1,b,a,c) #將b上的n-1個(gè)盤(pán)子移動(dòng)到c上

move(3,'A','B','C')運(yùn)行結(jié)果:奇偶數(shù)分離給出一個(gè)數(shù)列12,37,5,42,8,3,要求數(shù)列中的偶數(shù)進(jìn)入even數(shù)列,奇數(shù)進(jìn)入odd數(shù)列。#奇偶數(shù)進(jìn)入不同的數(shù)列l(wèi)ist=[12,37,5,42,8,3]even=[]odd=[]while(len(list)>0):number=list.pop()if(number%2==0):even.append(number)else:odd.append(number)print(even)print(odd)Python中in的應(yīng)用編寫(xiě)如下代碼,體驗(yàn)Python中in的應(yīng)用。forletterin'Python': #第一個(gè)實(shí)例print('當(dāng)前字母:',letter)fruits=['banana','apple','mango']forfruitinfruits: #第二個(gè)實(shí)例print('當(dāng)前水果:',fruit)print("Goodbye!") #注意對(duì)齊方式循環(huán)使用else語(yǔ)句編程在Python中,在for…else中,for中的語(yǔ)句和普通語(yǔ)句沒(méi)有區(qū)別,else中的語(yǔ)句會(huì)在循環(huán)正常執(zhí)行完(即for語(yǔ)句不是通過(guò)break跳出而中斷的)的情況下執(zhí)行,while…else也是一樣。循環(huán)使用else語(yǔ)句編程在10~20之間找到所有質(zhì)數(shù),同時(shí)對(duì)非質(zhì)數(shù)寫(xiě)出某兩個(gè)數(shù)的乘積,如12=2*6。在Notepad++中編寫(xiě)如下代碼即可實(shí)現(xiàn)。fornuminrange(10,20): #迭代10~20之間的數(shù)字foriinrange(2,num): #根據(jù)因子迭代ifnum%i==0: #確定第一個(gè)因子j=num/i #計(jì)算第二個(gè)因子print('%d=%d*%d'%(num,i,j)) #此處與C語(yǔ)言不同break #跳出當(dāng)前循環(huán)else: #循環(huán)的else部分print(num,'是一個(gè)質(zhì)數(shù)')Python面向?qū)ο竺嫦驅(qū)ο蠼榻Bself代表類(lèi)的對(duì)象類(lèi)的實(shí)例化Python內(nèi)置類(lèi)屬性Python對(duì)象的銷(xiāo)毀(垃圾回收)類(lèi)的繼承方法重寫(xiě)運(yùn)算符重載類(lèi)屬性與方法面向?qū)ο蠼榻BPython是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,在Python中能很容易地創(chuàng)建一個(gè)類(lèi)和對(duì)象。實(shí)例化:創(chuàng)建一個(gè)類(lèi)的實(shí)例、類(lèi)的具體對(duì)象。方法:類(lèi)中定義的函數(shù)。對(duì)象:通過(guò)類(lèi)定義的數(shù)據(jù)結(jié)構(gòu)對(duì)象。對(duì)象包括兩個(gè)數(shù)據(jù)成員(類(lèi)變量和實(shí)例變量)和方法。類(lèi)(Class):用來(lái)描述具有相同的屬性和方法的對(duì)象的集合。它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法。對(duì)象是類(lèi)的實(shí)例。類(lèi)變量:類(lèi)變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類(lèi)變量定義在類(lèi)中,且在函數(shù)體之外。類(lèi)變量通常不作為實(shí)例變量使用。實(shí)例變量:定義在方法中的變量只作用于當(dāng)前對(duì)象的類(lèi)。數(shù)據(jù)成員:類(lèi)變量或者實(shí)例變量用于處理類(lèi)及其實(shí)例對(duì)象的相關(guān)數(shù)據(jù)。繼承:一個(gè)派生類(lèi)(derivedclass)繼承基類(lèi)(baseclass)的字段和方法。繼承也允許把一個(gè)派生類(lèi)的對(duì)象作為一個(gè)基類(lèi)對(duì)象對(duì)待。例如這樣一個(gè)設(shè)計(jì),一個(gè)Dog類(lèi)型的對(duì)象派生自Animal類(lèi),這模擬了“是一個(gè)(is-a)”關(guān)系。方法重寫(xiě):如果從父類(lèi)繼承的方法不能滿(mǎn)足子類(lèi)的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(override),也稱(chēng)為方法重寫(xiě)。創(chuàng)建一個(gè)員工類(lèi)classEmployee:#采用:作為一個(gè)范圍'所有員工的基類(lèi)'empCount=0

def__init__(self,name,salary):#初始化函數(shù)=nameself.salary=salaryEmployee.empCount+=1defdisplayCount(self):#員工總數(shù)print("TotalEmployee%d"%Employee.empCount)defdisplayEmployee(self):print("Name:",,",Salary:",self.salary)empCount變量是一個(gè)類(lèi)變量,它的值將在這個(gè)類(lèi)的所有對(duì)象之間共享,可以在內(nèi)部類(lèi)或外部類(lèi)使用Employee.empCount訪(fǎng)問(wèn)。方法__init__()稱(chēng)為類(lèi)的構(gòu)造函數(shù)或初始化方法。當(dāng)創(chuàng)建了這個(gè)類(lèi)的對(duì)象時(shí)就會(huì)調(diào)用該方法。self代表類(lèi)的對(duì)象,self在定義類(lèi)的方法時(shí)是必須有的,雖然在調(diào)用時(shí)不必傳入相應(yīng)的參數(shù)。self代表類(lèi)的對(duì)象self類(lèi)的方法與普通的函數(shù)相比只有一個(gè)特別之處,即它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱(chēng),按照慣例它的名稱(chēng)是self。classTest:defprt(self):print(self)print(self.__class__)

t=Test()t.prt()類(lèi)的實(shí)例化其他編程語(yǔ)言中一般用關(guān)鍵字new對(duì)類(lèi)進(jìn)行實(shí)例化,但是在Python中并沒(méi)有這個(gè)關(guān)鍵字,類(lèi)的實(shí)例化類(lèi)似于函數(shù)的調(diào)用。以下使用類(lèi)的名稱(chēng)Employee來(lái)進(jìn)行實(shí)例化操作,并通過(guò)__init__方法接收參數(shù)。(1)創(chuàng)建Employee類(lèi)的第一個(gè)對(duì)象,代碼如下。emp1=Employee("Zara",2000)#self可以不用輸入(2)創(chuàng)建Employee類(lèi)的第二個(gè)對(duì)象,代碼如下。emp2=Employee("Manni",5000)(3)使用點(diǎn)(.)來(lái)訪(fǎng)問(wèn)對(duì)象的屬性,例如使用如下類(lèi)的名稱(chēng)訪(fǎng)問(wèn)類(lèi)變量。emp1.displayEmployee()emp2.displayEmployee()print("TotalEmployee%d"%Employee.empCount)(4)使用以下函數(shù)方式來(lái)訪(fǎng)問(wèn)屬性。getattr(obj,name[,default]):訪(fǎng)問(wèn)對(duì)象的屬性。hasattr(obj,name):檢查是否存在一個(gè)屬性。setattr(obj,name,value):設(shè)置一個(gè)屬性。如果屬性不存在,會(huì)創(chuàng)建一個(gè)新屬性。delattr(obj,name):刪除一個(gè)屬性。Python內(nèi)置類(lèi)屬性__dict__:類(lèi)的屬性,包含一個(gè)字典,由類(lèi)的數(shù)據(jù)屬性組成。__doc__:類(lèi)的文檔字符串。__name__:類(lèi)的名稱(chēng)。__module__:類(lèi)定義所在的模塊(類(lèi)的全名是__main__.className,如果類(lèi)位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__等于mymod)。__bases__:類(lèi)的所有父類(lèi)構(gòu)成元素,包含了一個(gè)由所有父類(lèi)組成的元組。Python對(duì)象的銷(xiāo)毀(垃圾回收)Python使用了引用計(jì)數(shù)這一簡(jiǎn)單技術(shù)來(lái)跟蹤和回收垃圾,在其內(nèi)部記錄著所有使用中的對(duì)象各有多少引用。一個(gè)內(nèi)部跟蹤變量稱(chēng)為一個(gè)引用計(jì)數(shù)器,當(dāng)對(duì)象被創(chuàng)建時(shí),就創(chuàng)建了一個(gè)引用計(jì)數(shù)器。當(dāng)這個(gè)對(duì)象不再需要時(shí),也就是說(shuō)這個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?時(shí),它被垃圾回收。但是回收不是“立即”的,而是由解釋器在適當(dāng)?shù)臅r(shí)機(jī)將垃圾對(duì)象占用的內(nèi)存空間回收。Python對(duì)象的銷(xiāo)毀(垃圾回收)示例代碼如下。a=40 #創(chuàng)建對(duì)象<40>b=a #增加引用<40>的計(jì)數(shù)c=[b] #增加引用<40>的計(jì)數(shù)dela #減少引用<40>的計(jì)數(shù)b=100 #減少引用<40>的計(jì)數(shù)c[0]=-1 #減少引用<40>的計(jì)數(shù)Python對(duì)象的銷(xiāo)毀(垃圾回收)垃圾回收機(jī)制不僅針對(duì)引用計(jì)數(shù)為0的對(duì)象,同樣也可以處理循環(huán)引用的情況。循環(huán)引用指的是兩個(gè)對(duì)象相互引用,但是沒(méi)有其他變量引用它們。Python的垃圾收集器實(shí)際上是一個(gè)引用計(jì)數(shù)器和一個(gè)循環(huán)垃圾收集器。作為引用計(jì)數(shù)的補(bǔ)充,垃圾收集器也會(huì)留心被分配的總量很大及未通過(guò)引用計(jì)數(shù)銷(xiāo)毀的的對(duì)象。在這種情況下,解釋器會(huì)暫停,試圖清理所有未引用的循環(huán)。例3:析構(gòu)函數(shù)__del__在對(duì)象被銷(xiāo)毀的時(shí)候被調(diào)用,當(dāng)對(duì)象不再被使用時(shí),運(yùn)行__del__方法,示例代碼如下。classPoint:def__init__(self,x=0,y=0):self.x=xself.y=ydef__del__(self):class_name=self.__class__.__name__print(class_name,"銷(xiāo)毀")

pt1=Point()pt2=pt1pt3=pt1print(id(pt1),id(pt2),id(pt3))#打印對(duì)象的iddelpt1delpt2delpt3類(lèi)的繼承面向?qū)ο蟮木幊處?lái)的主要好處之一是代碼的重用。實(shí)現(xiàn)這種重用的方法之一是繼承機(jī)制。需要注意的是,繼承語(yǔ)法“class派生類(lèi)名(基類(lèi)名)://…”中的基類(lèi)名寫(xiě)在括號(hào)里,基類(lèi)是在類(lèi)定義的時(shí)候在元組之中指明的。classParent:#定義父類(lèi)parentAttr=100def__init__(self):print("調(diào)用父類(lèi)構(gòu)造函數(shù)")defparentMethod(self):print('調(diào)用父類(lèi)方法')defsetAttr(self,attr):Parent.parentAttr=attrdefgetAttr(self):print("父類(lèi)屬性:",Parent.parentAttr)

classChild(Parent): #定義子類(lèi)def__init__(self):print("調(diào)用子類(lèi)構(gòu)造方法")defchildMethod(self):print('調(diào)用子類(lèi)方法')c=Child() #實(shí)例化子類(lèi)c.childMethod() #調(diào)用子類(lèi)的方法c.parentMethod() #調(diào)用父類(lèi)方法c.setAttr(200) #再次調(diào)用父類(lèi)的方法,設(shè)置屬性值c.getAttr() #再次調(diào)用父類(lèi)的方法,獲取屬性值可以使用issubclass()或者isinstance()方法來(lái)檢測(cè)。

issubclass():布爾函數(shù),判斷一個(gè)類(lèi)是否是另一個(gè)類(lèi)的子類(lèi)或者子孫類(lèi),語(yǔ)法為issubclass(sub,sup)。isinstance(obj,class):布爾函數(shù),如果obj是class類(lèi)的對(duì)象或者是一個(gè)class子類(lèi)的對(duì)象,則返回True。方法重寫(xiě)如果父類(lèi)的方法不能滿(mǎn)足需求,可以在子類(lèi)中重寫(xiě)父類(lèi)的方法,示例代碼如下。classParent: #定義父類(lèi)defmyMethod(self):print('調(diào)用父類(lèi)方法')classChild(Parent): #定義子類(lèi)defmyMethod(self):print('調(diào)用子類(lèi)方法')c=Child() #子類(lèi)實(shí)例c.myMethod() #子類(lèi)調(diào)用重寫(xiě)方法運(yùn)算符重載Python同樣支持運(yùn)算符重載,示例代碼如下。classVector:def__init__(self,a,b):self.a=aself.b=bdef__str__(self):return'Vector(%d,%d)'%(self.a,self.b)def__add__(self,other):returnVector(self.a+other.a,self.b-other.b)

v1=Vector(3,8)v2=Vector(5,-2)print(v1+v2)上述代碼在執(zhí)行print(v1+v2)時(shí)重新加載了__add__(self,other)函數(shù),因此輸出的結(jié)果是“Vector(8,10)”。類(lèi)屬性與方法1.類(lèi)的私有屬性_

_private_attrs:以?xún)蓚€(gè)下劃線(xiàn)開(kāi)頭,聲明該屬性為私有,不能在類(lèi)的外部被使用或直接訪(fǎng)問(wèn)。在類(lèi)內(nèi)部的方法中使用時(shí)為self._

_private_attrs。2.類(lèi)的方法在類(lèi)的內(nèi)部,使用def關(guān)鍵字可以為類(lèi)定義一個(gè)方法。與一般函數(shù)的定義不同,類(lèi)方法必須包含參數(shù)self,且為第一個(gè)參數(shù)。3.類(lèi)的私有方法_

_private_method:以?xún)蓚€(gè)下劃線(xiàn)開(kāi)頭,聲明該方法為私有方法,不能在類(lèi)的外部調(diào)用,在類(lèi)的內(nèi)部可調(diào)用self._

_private_methods。Python不允許實(shí)例化的類(lèi)訪(fǎng)問(wèn)私有變量,但可以使用“object._className__attrName”語(yǔ)句訪(fǎng)問(wèn)屬性。單下劃線(xiàn)、雙下劃線(xiàn)、頭尾雙下劃線(xiàn)的含義說(shuō)明如下。__foo__:定義的是特列方法,類(lèi)似

__init__()

之類(lèi)的方法。_foo:以單下劃線(xiàn)開(kāi)頭的是protected類(lèi)型的變量,即保護(hù)類(lèi)型,只允許其本身與子類(lèi)進(jìn)行訪(fǎng)問(wèn),不能用于frommoduleimport*。__foo:雙下劃線(xiàn)的是私有(private)類(lèi)型的變量,只允許這個(gè)類(lèi)本身進(jìn)行訪(fǎng)問(wèn)。Python的集成開(kāi)發(fā)環(huán)境PyCharm軟件Jupyter軟件PyCharm軟件PyCharm2017專(zhuān)業(yè)版是一款PythonIDE,帶有一套可以幫助用戶(hù)在使用Python語(yǔ)言開(kāi)發(fā)程序時(shí)提高效率的工具,比如調(diào)試、語(yǔ)法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試及版本控制等工具。PyCharm的開(kāi)發(fā)環(huán)境打開(kāi)網(wǎng)址/pycharm/,單擊主頁(yè)中的【DownloadNow】按鈕,進(jìn)入PyCharm下載頁(yè)面,如圖4.29所示。PyCharm的開(kāi)發(fā)環(huán)境選擇下載Windows版本,雙擊打開(kāi)下載的文件,打開(kāi)安裝向?qū)?,如圖所示,在安裝過(guò)程中選擇創(chuàng)建64位的桌面快捷鍵,創(chuàng)建.py文件的關(guān)聯(lián),其他選擇默認(rèn)安裝。

運(yùn)行PyCharm軟件,主界面如圖所示。選擇【CreateNewProject】選項(xiàng),在打開(kāi)的窗口中輸入項(xiàng)目名、路徑,如圖所示。為了添加Python的解析器,單擊Interpreter下拉列表框右邊的按鈕,選擇【AddLocal】命令,打開(kāi)選擇Python解析器窗口,如圖所示。在【開(kāi)始】菜單中找到并右擊已安裝好的Python3.6主程序,選擇【屬性】命令,打開(kāi)【屬性】窗口,復(fù)制目標(biāo)輸入框中的內(nèi)容,如圖所示,粘貼到Python解析器窗口中,然后單擊【OK】按鈕。新建文件右擊項(xiàng)目Test,選擇【New】→【PythonFile】命令,如圖所示,新建一個(gè)HelloWorld.py文件,在其中輸入代碼print("HelloWorld")。設(shè)置控制臺(tái)運(yùn)行之前,工具欄中的【運(yùn)行】和【調(diào)試】按鈕都是灰色的,不可觸發(fā),這是因?yàn)榭刂婆_(tái)需要被提前設(shè)置。單擊【運(yùn)行】按鈕旁邊的倒三角按鈕,選擇命令,進(jìn)入【Run/DebugConfigurations】配置界面。單擊加號(hào)圖標(biāo),新建一個(gè)配置項(xiàng),并選擇Python,如圖所示。將Python文件命名為Hello,選擇【Script】選項(xiàng),找到新建的HelloWorld.py文件。單擊【OK】按鈕,自動(dòng)返回編輯界面,這時(shí)候【運(yùn)行】和【調(diào)試】按鈕即可全部點(diǎn)亮,如圖所示。單擊【運(yùn)行】按鈕,查看輸出的結(jié)果,如圖所示。調(diào)試與運(yùn)行在代碼的前面、行號(hào)的后面右擊,就可以設(shè)置斷點(diǎn),如圖所示。單擊甲蟲(chóng)圖標(biāo),進(jìn)行斷點(diǎn)調(diào)試,如圖所示。單擊【調(diào)試】按鈕,會(huì)執(zhí)行到第一個(gè)斷點(diǎn),顯示該斷點(diǎn)之前的變量信息(藍(lán)色條塊標(biāo)記),如圖所示。單擊【StepOver】按鈕或者按【F8】鍵,到達(dá)下一個(gè)斷點(diǎn),如圖所示。對(duì)于斷點(diǎn)的其他操作和功能,把鼠標(biāo)指針移到相應(yīng)的按鈕上便可以看到。Jupyter軟件Jupyter軟件介紹Jupyter的開(kāi)發(fā)環(huán)境運(yùn)行Jupyter新建文件修改文檔單元格常用快捷鍵歷史輸入和輸出變量Jupyter的外部功能創(chuàng)建目錄導(dǎo)航導(dǎo)入和導(dǎo)出文件圖形編程Jupyter軟件介紹JupyterNotebook是一款集編程和寫(xiě)作于一體的效率工具,支持運(yùn)行40多種編程語(yǔ)言。Jupyter脫胎于IPython項(xiàng)目,隨著項(xiàng)目發(fā)展壯大,已經(jīng)不僅僅局限于Python這一種編程語(yǔ)言。Jupyter的名字就很好地釋義了這一發(fā)展過(guò)程,它是Julia、Python及R語(yǔ)言的組合,而且現(xiàn)在支持的語(yǔ)言也遠(yuǎn)超這3種。這款軟件具有如下優(yōu)點(diǎn)。極其適合數(shù)據(jù)分析:在命令行窗口中運(yùn)行程序時(shí),可視化結(jié)果顯示在另一個(gè)窗口中,包含函數(shù)和類(lèi)的腳本存在其他文檔中,同時(shí)程序員還需另外寫(xiě)一份說(shuō)明文檔來(lái)解釋程序如何執(zhí)行以及結(jié)果如何。JupyterNotebook能夠?qū)⑺袃?nèi)容收歸一處。支持多語(yǔ)言:只要安裝相對(duì)應(yīng)的核,JupyterNotebook就同時(shí)支持R語(yǔ)言(做數(shù)據(jù)分析)和學(xué)術(shù)界常用的Matlab和Mathematica等。分享便捷:支持以網(wǎng)頁(yè)的形式分享,GitHub支持Notebook展示,也可以通過(guò)nbviewer分享文檔,當(dāng)然也支持導(dǎo)出成HTML、Markdown、PDF等多種格式的文檔。遠(yuǎn)程運(yùn)行:在任何地點(diǎn)都可以通過(guò)網(wǎng)絡(luò)連接遠(yuǎn)程服務(wù)器來(lái)實(shí)現(xiàn)運(yùn)行。交互式展現(xiàn):不僅可以輸出圖片、視頻、數(shù)學(xué)公式,甚至可以通過(guò)交互插件(Interactivewidgets)來(lái)支持三維模型,呈現(xiàn)一些互動(dòng)的可視化內(nèi)容,比如可以縮放的地圖或者可以旋轉(zhuǎn)的三維模型。Jupyter的開(kāi)發(fā)環(huán)境在Jupyter官網(wǎng)上提出了兩種Jupyter的安裝建議,其中強(qiáng)烈推薦的是安裝Anaconda,因?yàn)槠湟呀?jīng)包含了JupyterNotebook、Python和其他常用于科學(xué)計(jì)算及數(shù)據(jù)分析的軟件包。安裝JupyterNotebook的步驟:打開(kāi)網(wǎng)址https://www.continuum.io/downloads,下載與Python相應(yīng)的Anaconda,如圖所示。下載后,按照提示一步步安裝,記住選中與Python相關(guān)聯(lián)。運(yùn)行Jupyter在【開(kāi)始】菜單中找到【Anaconda3】級(jí)聯(lián)菜單,再執(zhí)行【JupyterNotebook】命令來(lái)運(yùn)行軟件,出現(xiàn)圖所示的窗口。打開(kāi)JupyterNotebook后是一個(gè)頁(yè)面,【Files】選項(xiàng)卡中是本地的文件夾。新建文件單擊頁(yè)面右上角的【New】按鈕,選擇【Python3】選項(xiàng),即可新建一個(gè)Python3程序,如圖所示。JupyterNotebook是支持Tab鍵自動(dòng)補(bǔ)充單詞的,如在輸入pr之后按【Tab】鍵,則會(huì)出現(xiàn)以pr開(kāi)頭的詞列表,如圖4.45所示。修改文檔修改名稱(chēng):JupyterNotebook提供了兩種方法修改文檔名稱(chēng),一種是單擊【Untitled】按鈕;二是選擇【File】→【Rename】命令。導(dǎo)出文檔:選擇【File】→【Downloadas】命令,如圖所示,或按【Ctrl+S】組合,可以保存文檔,默認(rèn)保存的文件名為ipynb,保存在軟件主目錄下。單元格選擇一個(gè)空的單元格,在【Code】下拉列表中選擇【Heading】,會(huì)出現(xiàn)一個(gè)不同類(lèi)型的單元格。改變單元格類(lèi)型時(shí)彈出的消息中有解釋?zhuān)竺婺莻€(gè)單元格以#號(hào)標(biāo)記開(kāi)頭,意味著這是一個(gè)一級(jí)標(biāo)題,如圖所示。如果需要子標(biāo)題,可以使用以下標(biāo)記表示,標(biāo)題的顯示效果如圖所示。常用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論