《數(shù)據(jù)采集與處理:基于python》 課件 第2章-Python基礎(chǔ)_第1頁(yè)
《數(shù)據(jù)采集與處理:基于python》 課件 第2章-Python基礎(chǔ)_第2頁(yè)
《數(shù)據(jù)采集與處理:基于python》 課件 第2章-Python基礎(chǔ)_第3頁(yè)
《數(shù)據(jù)采集與處理:基于python》 課件 第2章-Python基礎(chǔ)_第4頁(yè)
《數(shù)據(jù)采集與處理:基于python》 課件 第2章-Python基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩210頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章

Python基礎(chǔ)《數(shù)據(jù)采集與處理:基于Python》2024/5/1112024/5/112教學(xué)目標(biāo)本章學(xué)習(xí)目標(biāo)1.了解Python的特點(diǎn)和相關(guān)開(kāi)發(fā)環(huán)境;2.掌握Python的基本語(yǔ)法、控制結(jié)構(gòu)、異常與處理及函數(shù)的封裝和使用等;3.理解Python常用數(shù)據(jù)類(lèi)型和數(shù)據(jù)結(jié)構(gòu)(如列表、元組、字典和集合等)的特點(diǎn),熟練掌握其常用操作方式。本章提綱1、Python簡(jiǎn)介2、Python基本語(yǔ)法與命令3、運(yùn)算符、表達(dá)式與內(nèi)置對(duì)象4、函數(shù)5、異常及其處理Python簡(jiǎn)介2024/5/113什么是PythonPython是一種高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言,是一門(mén)跨平臺(tái)、開(kāi)源、免費(fèi)的解釋型高級(jí)動(dòng)態(tài)編程語(yǔ)言。Python支持命令式編程、函數(shù)式編程,完全支持面向?qū)ο蟪绦蛟O(shè)計(jì),擁有大量的擴(kuò)展庫(kù)。Python是交互式語(yǔ)言,可以在一個(gè)Python提示符下直接互動(dòng)執(zhí)行程序;Python也是“膠水語(yǔ)言”,可以把多種不同語(yǔ)言編寫(xiě)的程序融合到一起,實(shí)現(xiàn)無(wú)縫拼接,更好地發(fā)揮不同語(yǔ)言和工具的優(yōu)勢(shì),滿足不同應(yīng)用領(lǐng)域的需求;Python是初學(xué)者的語(yǔ)言,對(duì)初級(jí)程序員而言,它支持廣泛的應(yīng)用程序開(kāi)發(fā),包括簡(jiǎn)單的文字處理、WWW瀏覽器、游戲等。2024/5/114什么是PythonPython的特點(diǎn)如下:易于學(xué)習(xí):Python的關(guān)鍵字相對(duì)較少,結(jié)構(gòu)簡(jiǎn)單,有明確定義的語(yǔ)法,學(xué)習(xí)起來(lái)更加容易。易于閱讀:Python代碼的定義更清晰。易于維護(hù):Python的成功在于它的源代碼相當(dāng)容易維護(hù)。廣泛的標(biāo)準(zhǔn)庫(kù):Python的最大優(yōu)勢(shì)之一是擁有豐富的庫(kù),而且可以跨平臺(tái),在Unix、Windows和macOS上都兼容得很好?;?dòng)模式:支持互動(dòng)模式,可以從終端輸入執(zhí)行代碼并獲得結(jié)果,進(jìn)行互動(dòng)測(cè)試和調(diào)試代碼片段??梢浦?基于其開(kāi)放源代碼的特性,Python可被移植到許多平臺(tái)(即可以在許多平臺(tái)工作)??蓴U(kuò)展:如果需要一段運(yùn)行很快的關(guān)鍵代碼,或者是編寫(xiě)一些不愿意開(kāi)放的算法,那么可以使用C或C完成此部分程序,然后從Python程序中調(diào)用。數(shù)據(jù)庫(kù):Python提供了所有主要的商業(yè)數(shù)據(jù)庫(kù)的接口。GUI編程:Python支持創(chuàng)建GUI,它可以移植到許多系統(tǒng)中調(diào)用??汕度?可以將Python嵌入C/C程序中,讓程序獲得“腳本化”的能力。2024/5/115為什么選擇Python在眾多解釋型語(yǔ)言中,Python最大的特點(diǎn)是擁有一個(gè)巨大且活躍的科學(xué)計(jì)算社區(qū)。進(jìn)入21世紀(jì)以來(lái),在行業(yè)應(yīng)用和學(xué)術(shù)研究中采用Python進(jìn)行科學(xué)計(jì)算的勢(shì)頭越來(lái)越猛。近年來(lái),由于Python有不斷改良的庫(kù)(主要是pandas),其已成為數(shù)據(jù)處理任務(wù)的一大代替方案。結(jié)合其在通用編程方面的強(qiáng)大實(shí)力,完全可以只用Python一種語(yǔ)言來(lái)構(gòu)建以數(shù)據(jù)為中心的應(yīng)用程序。作為一個(gè)科學(xué)計(jì)算平臺(tái),Python的成功源于其能夠輕松地集成C、C以及Fortran代碼。大部分現(xiàn)代計(jì)算機(jī)環(huán)境都利用了一些Fortran和C庫(kù)來(lái)實(shí)現(xiàn)線性代數(shù)、優(yōu)選、積分、快速傅里葉變換以及其他諸如此類(lèi)的算法。選擇Python進(jìn)行數(shù)據(jù)采集、處理與分析的理由如下。1.語(yǔ)言排行榜居首位雖然Python是開(kāi)發(fā)較早的編程語(yǔ)言,但近年來(lái)反而變得越來(lái)越流行,在KDnuggets調(diào)查的數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)工具排行榜中,Python自2017年一直居于首位。2024/5/116為什么選擇Python2.語(yǔ)言簡(jiǎn)潔、優(yōu)美,功能強(qiáng)大Python的語(yǔ)法非常接近英語(yǔ),它去掉了傳統(tǒng)的C/Java使用大括號(hào)來(lái)區(qū)分一個(gè)方法體或者類(lèi)的形式,采用強(qiáng)制縮進(jìn)來(lái)表示一個(gè)方法體或者類(lèi),語(yǔ)言風(fēng)格統(tǒng)一且優(yōu)美。Python內(nèi)置了很多高效的庫(kù),比如,同樣一項(xiàng)工作,C語(yǔ)言可能需要1000行代碼,Java需要100行代碼,Python可能只需要10行代碼,而且桌面應(yīng)用、Web開(kāi)發(fā)、自動(dòng)化測(cè)試運(yùn)維、爬蟲(chóng)、人工智能及大數(shù)據(jù)處理都能使用Python來(lái)完成。3.跨平臺(tái)很多流行編程語(yǔ)言(如Java、C、C)都能跨平臺(tái)而且開(kāi)源,Python也是如此。由于它是開(kāi)源的,所以也具有可移植性。你可以隨處運(yùn)行Python,換句話說(shuō),在Windows上寫(xiě)的代碼,也可以很方便地在Linux、macOS上運(yùn)行。2024/5/117為什么選擇Python4.社區(qū)人氣火爆Python有非常知名的社區(qū),而且人氣很火爆,除了Python官網(wǎng),在GitHub、OpenStack等網(wǎng)站上也有很多Python開(kāi)源庫(kù)和討論社區(qū)。5.被眾多知名大公司使用國(guó)外非常有名的谷歌、臉書(shū)、雅虎、YouTube,還有美國(guó)宇航局(NASA)以及著名的開(kāi)源云計(jì)算平臺(tái)OpenStack都使用Python,國(guó)內(nèi)的豆瓣也不例外。6.支持全棧開(kāi)發(fā)除了主要應(yīng)用于數(shù)據(jù)分析與數(shù)據(jù)科學(xué)領(lǐng)域,Python還支持Web應(yīng)用、桌面應(yīng)用、服務(wù)端程序、游戲等各類(lèi)應(yīng)用和服務(wù)程序的開(kāi)發(fā)。2024/5/118Python發(fā)展歷史與版本Python是吉多·范羅蘇姆于20世紀(jì)80年代末90年代初在荷蘭國(guó)家數(shù)學(xué)與計(jì)算機(jī)科學(xué)研究中心設(shè)計(jì)出來(lái)的。Python本身也是由諸多其他語(yǔ)言發(fā)展而來(lái)的,比如ABC、Modula-3、C、C、Algol-68、Smalltalk、Unixshell等。像Perl語(yǔ)言一樣,Python源代碼同樣遵循GNU通用公共許可證(GeneralPublicLicense,GPL)協(xié)議。現(xiàn)在,Python由一個(gè)核心開(kāi)發(fā)團(tuán)隊(duì)維護(hù),吉多·范羅蘇姆仍然發(fā)揮著至關(guān)重要的作用,指導(dǎo)著Python的進(jìn)展。Python目前存在2.x和3.x兩個(gè)系列的版本,互相不兼容,Python2.x系列已于2020年1月1日正式停止維護(hù)和更新,本書(shū)所有代碼均基于Python3.x版本。在選擇Python版本時(shí),一定要先考慮清楚自己學(xué)習(xí)Python的目的,打算做哪方面的開(kāi)發(fā),該領(lǐng)域或方向有哪些擴(kuò)展庫(kù)可用,這些擴(kuò)展庫(kù)支持Python的哪個(gè)最高版本。2024/5/119Python解釋器在編寫(xiě)Python代碼時(shí),我們得到的是一個(gè)包含Python代碼的以“.py”為擴(kuò)展名的文本文件。要運(yùn)行Python代碼,就需要Python解釋器去執(zhí)行“.py”文件。1.CPython當(dāng)從Python官方網(wǎng)站下載并安裝好Python3后,我們就直接獲得了一個(gè)官方版本的解釋器——CPython。這個(gè)解釋器是用C語(yǔ)言開(kāi)發(fā)的,所以稱為CPython。在命令行中運(yùn)行Python就是啟動(dòng)CPython解釋器。CPython是使用最廣的Python解釋器。2.IPythonIPython是基于CPython的一個(gè)交互式解釋器,也就是說(shuō),IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。CPython使用“>>>”作為提示符,而IPython使用“In[序號(hào)]:”作為提示符。2024/5/1110Python解釋器3.PyPyPyPy是另一個(gè)Python解釋器,它的目標(biāo)是提高執(zhí)行速度。PyPy采用及時(shí)編譯(justintime,JIT)技術(shù)對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意:不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度。絕大部分Python代碼都可以在PyPy下運(yùn)行,但是PyPy和CPython有一些區(qū)別,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會(huì)得到不同的結(jié)果。如果代碼要在PyPy下執(zhí)行,就需要了解PyPy和CPython的不同點(diǎn)。4.JythonJython是在Java平臺(tái)上運(yùn)行的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。2024/5/1111Python開(kāi)發(fā)環(huán)境Anaconda包含了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),基本上可以一站式提供常用的數(shù)據(jù)采集、處理和分析的模塊和開(kāi)發(fā)環(huán)境。相比官方的Python版本,Anaconda內(nèi)容更豐富,編輯器更優(yōu)美,操作更便利。本書(shū)默認(rèn)使用的開(kāi)發(fā)環(huán)境是Anaconda3,其中包含JupyterNotebook和Spyder兩種開(kāi)發(fā)環(huán)境,下載地址:https://www.anaconda.com/download。其他常用的開(kāi)發(fā)環(huán)境還有IDLE、PyCharm、Eclipse+PyDev、Eric、PythonWin等。2024/5/1112Python開(kāi)發(fā)環(huán)境1.JupyterNotebook本書(shū)的源碼示例和運(yùn)行結(jié)果呈現(xiàn)方式包括Python和IPythonShell及JupyterNotebook形式,其中隨書(shū)附帶的源程序多數(shù)是JupyterNotebook格式的文件。JupyterNotebook是一個(gè)交互式筆記本,支持運(yùn)行40多種編程語(yǔ)言,其本質(zhì)是一個(gè)Web應(yīng)用程序,便于創(chuàng)建和共享程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化和Markdown(一種輕量級(jí)標(biāo)記語(yǔ)言)語(yǔ)法。其用途包括數(shù)據(jù)清理和轉(zhuǎn)換、數(shù)值模擬、統(tǒng)計(jì)建模、機(jī)器學(xué)習(xí)等。啟動(dòng)JupyterNotebook后會(huì)打開(kāi)一個(gè)網(wǎng)頁(yè),在該網(wǎng)頁(yè)右上角單擊“New”菜單,然后選擇“Python3”打開(kāi)一個(gè)新的窗口,在該窗口即可編寫(xiě)和運(yùn)行Python代碼,圖中為JupyterNotebook的開(kāi)發(fā)環(huán)境界面示例。其中,代碼編輯環(huán)境中的每個(gè)方框?yàn)橐粋€(gè)Cell(即單元,通過(guò)“Cell”菜單中的“CellType”選項(xiàng)可以更改單元為可執(zhí)行的Code類(lèi)型、Markdown類(lèi)型等),前面有“In[序號(hào)]”形式,單擊“運(yùn)行”按鈕即可在當(dāng)前Cell下看到運(yùn)行結(jié)果。另外,“File”菜單中還有“Open”(打開(kāi)文件)、“Saveas...”(另存為)、“Rename...”(重命名)、“Downloadas”(下載為其他格式文件)等選項(xiàng)。2024/5/1113Python開(kāi)發(fā)環(huán)境在Windows平臺(tái)中,JupyterNotebook的工作文件目錄缺省安裝在C盤(pán)下,改變JupyterNotebook的工作文件目錄的正確方法如下:(1)打開(kāi)AnacondaPrompt。(2)輸入命令jupyternotebook--generate-config。(3)打開(kāi)C:/Users/你的賬戶/.jupyter/jupyter_notebook_config.py,將c.Notebook-App.notebook_dir=修改為c.NotebookApp.notebook_dir=你想要默認(rèn)打開(kāi)的文件夾。(4)在“開(kāi)始”菜單中找到JupyterNotebook快捷鍵,點(diǎn)擊鼠標(biāo)右鍵→更多→打開(kāi)文件位置,在打開(kāi)的目錄中選中該快捷方式,在鼠標(biāo)右鍵菜單中點(diǎn)擊“屬性”,將“屬性”窗口的“快捷方式”選項(xiàng)卡中的“目標(biāo)”項(xiàng)最后的“%USERPROFILE%”去掉,然后點(diǎn)擊“確定”。2024/5/1114Python開(kāi)發(fā)環(huán)境(5)現(xiàn)在點(diǎn)擊JupyterNotebook快捷方式就可以直接在用戶想要默認(rèn)打開(kāi)的文件夾中啟動(dòng)它了。JupyterNotebook還可以單獨(dú)安裝和使用??梢栽贘upyter官網(wǎng)(/)中直接使用,也可以在自己電腦上安裝Jupyter,安裝命令為“pipinstalljupyter”,安裝完成后使用“jupyternotebook”命令即可啟動(dòng)JupyterNotebook。JupyterNotebook中的快捷鍵包括:●Ctrl+Enter:執(zhí)行“運(yùn)行”?!馭hift+Enter:執(zhí)行“運(yùn)行”并換行?!馎lt+Enter:執(zhí)行“運(yùn)行”,且不管后面有沒(méi)有新格,都會(huì)插入新格。●K、J或上下鍵可以實(shí)現(xiàn)上下移動(dòng),選中格子后按兩下D鍵可以刪除格子,就像VI編輯器一樣。2024/5/1115Python開(kāi)發(fā)環(huán)境2.SpyderSpyder是Anaconda中的一個(gè)Python編程小工具,用Python編寫(xiě),免費(fèi)且開(kāi)源,特點(diǎn)是將綜合開(kāi)發(fā)工具的高級(jí)編輯、分析、調(diào)試和剖析功能與科學(xué)軟件包的數(shù)據(jù)探索、交互式執(zhí)行、深度檢查和可視化功能獨(dú)特地結(jié)合起來(lái)。在Windows平臺(tái)中,點(diǎn)擊“開(kāi)始”菜單中的“AnacondaNavigator”即可展示Anaconda中集成的第三方工具,如JupyterLab、Orange3、Spyder等,選中其中的Spyder并點(diǎn)擊“Launch”按鈕即可打開(kāi)Spyder編程工具,如圖2-2所示。當(dāng)然,也可以在“開(kāi)始”菜單中直接點(diǎn)擊Spyder將其打開(kāi)。2024/5/1116Python開(kāi)發(fā)環(huán)境打開(kāi)Spyder后,其開(kāi)發(fā)環(huán)境界面如圖所示。右下角以交互模式輸入命令并顯示輸出結(jié)果,左邊是程序編輯窗口。2024/5/1117Python開(kāi)發(fā)環(huán)境IDLE是Python軟件包自帶的一個(gè)集成開(kāi)發(fā)環(huán)境,其開(kāi)發(fā)環(huán)境界面如圖所示。它提供的基本功能包括語(yǔ)法高亮、段落縮進(jìn)、基本文本編輯、Tab鍵控制、程序調(diào)試等,初學(xué)者利用它可以方便地創(chuàng)建、運(yùn)行、測(cè)試和調(diào)試Python程序。2024/5/1118Python開(kāi)發(fā)環(huán)境4.PyCharmPyCharm是由JetBrains打造的一款PythonIDE,支持macOS、Windows、Linux系統(tǒng),功能強(qiáng)大,有社區(qū)版、教育版和商業(yè)版三種版本。PyCharm下載地址:/pycharm/download/。PyCharm的功能包括代碼調(diào)試、語(yǔ)法高亮、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制等,其開(kāi)發(fā)環(huán)境界面如圖所示。2024/5/1119Python擴(kuò)展庫(kù)的安裝方法進(jìn)行Python編程時(shí),經(jīng)常會(huì)用到第三方擴(kuò)展庫(kù),這些擴(kuò)展庫(kù)在安裝后方可使用。在Anaconda環(huán)境下,其安裝方法有多種,如:●pip安裝:點(diǎn)擊Windows“開(kāi)始”菜單中的“AnacondaPrompt”進(jìn)入命令行終端環(huán)境操作。pip安裝分為在線安裝和離線安裝兩種方式,缺省常用的是在線安裝方式,離線安裝則是在下載擴(kuò)展名為“whl”的第三方庫(kù)文件后進(jìn)行安裝。pip安裝的相關(guān)命令如表所示。2024/5/1120pip命令(conda對(duì)應(yīng)命令的形式類(lèi)似)說(shuō)明pipdownloadSomePackage[==version]下載擴(kuò)展庫(kù)的指定版本,不安裝pipfreeze[>requirements.txt]以requirements的格式列出已安裝模塊pipsearchSomePackage搜索指定包pipshowSomePackage顯示指定包piplist列出當(dāng)前已安裝的所有模塊及版本pipinstallSomePackage[==version]在線安裝SomePackage模塊的指定版本pipinstallSomePackage.whl通過(guò)whl文件離線安裝擴(kuò)展庫(kù)pipinstallpackage1package2…依次(在線)安裝package1、package2等擴(kuò)展模塊pipinstall-rrequirements.txt安裝requirements.txt文件中指定的擴(kuò)展庫(kù)pipinstall--upgradeSomePackage升級(jí)SomePackage模塊pipuninstallSomePackage[==version]卸載SomePackage模塊的指定版本Python擴(kuò)展庫(kù)的安裝方法●exe安裝:部分第三方庫(kù)提供了安裝程序,可直接安裝擴(kuò)展庫(kù)?!馽onda在線安裝:安裝命令的形式與pip類(lèi)似,即condainstall…。如果設(shè)備上安裝了多個(gè)Python開(kāi)發(fā)環(huán)境,那么在一個(gè)環(huán)境下安裝的擴(kuò)展庫(kù)無(wú)法在另一個(gè)環(huán)境下使用,需要分別安裝。注意,在線安裝默認(rèn)使用國(guó)外網(wǎng)站,但安裝進(jìn)程會(huì)很慢,因此可以考慮使用國(guó)內(nèi)鏡像網(wǎng)站,如:●清華大學(xué):/simple●阿里云:/pypi/simple使用鏡像源的Python安裝命令形式如下:pipinstall庫(kù)名-i鏡像網(wǎng)址另外,也可通過(guò)設(shè)置鏡像源方式避免每次執(zhí)行安裝命令都輸入鏡像地址。首先需要升級(jí)pip到最新的版本(10.0.0版本以上),然后進(jìn)行配置。以設(shè)置清華大學(xué)鏡像源為例,具體命令如下:python-mpipinstall--upgradepippipconfigsetglobal.index-url/simple2024/5/1121Python基本語(yǔ)法與命令2024/5/1122Python編程規(guī)范良好的編程規(guī)范和風(fēng)格有助于機(jī)器和人類(lèi)閱讀,Python非常重視代碼的可讀性,對(duì)代碼布局和排版有嚴(yán)格的要求。下面介紹部分Python社區(qū)對(duì)代碼編寫(xiě)的一些約定俗成的要求、規(guī)范和常用的代碼優(yōu)化方法,建議遵循并養(yǎng)成良好的編程習(xí)慣。1.縮進(jìn)與C/C和Java等語(yǔ)言有代碼塊開(kāi)始和結(jié)束的標(biāo)點(diǎn)符號(hào)不同,Python程序依靠代碼塊的縮進(jìn)來(lái)體現(xiàn)代碼之間的邏輯關(guān)系,縮進(jìn)結(jié)束就表示一個(gè)代碼塊結(jié)束。而類(lèi)定義、函數(shù)定義、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、with塊行尾的冒號(hào)則表示縮進(jìn)的開(kāi)始。一般情況下以4個(gè)空格為基本縮進(jìn)單位,也可以是2個(gè)或多個(gè)空格,但同一個(gè)級(jí)別的代碼塊的縮進(jìn)量必須相同,并且建議同一個(gè)程序文件內(nèi)代碼縮進(jìn)量保持統(tǒng)一,如下所示。2024/5/1123Python編程規(guī)范2.模塊導(dǎo)入雖然import語(yǔ)法支持一個(gè)語(yǔ)句可以導(dǎo)入多個(gè)模塊,但每個(gè)import語(yǔ)句最好只導(dǎo)入一個(gè)模塊,且最好按標(biāo)準(zhǔn)庫(kù)、擴(kuò)展庫(kù)、自定義庫(kù)的順序依次導(dǎo)入。3.代碼間隔建議在每個(gè)類(lèi)、函數(shù)定義和一段完整的功能代碼之后增加一個(gè)空行,在運(yùn)算符兩側(cè)各增加一個(gè)空格,逗號(hào)后面增加一個(gè)空格。4.長(zhǎng)語(yǔ)句拆分或換行如果語(yǔ)句過(guò)長(zhǎng),可以考慮拆分成多個(gè)短一些的語(yǔ)句,以保證代碼具有較好的可讀性。如果語(yǔ)句確實(shí)太長(zhǎng)而超過(guò)屏幕寬度,最好使用續(xù)行符(linecontinuationcharacter)“\”,或者使用圓括號(hào)將多行代碼括起來(lái)表示是一條語(yǔ)句,如下所示。2024/5/1124Python編程規(guī)范5.復(fù)雜表達(dá)式雖然Python運(yùn)算符有明確的優(yōu)先級(jí),但對(duì)于復(fù)雜的表達(dá)式,建議在適當(dāng)?shù)奈恢檬褂美ㄌ?hào),使得各種運(yùn)算的隸屬關(guān)系和順序更加明確、清晰。6.注釋(1)以符號(hào)“#”開(kāi)始,表示本行“#”之后的內(nèi)容為注釋。(2)包含在一對(duì)三引號(hào)"……"或"""……"""之間且不屬于任何語(yǔ)句的內(nèi)容將被解釋器認(rèn)為是注釋。7.標(biāo)識(shí)符標(biāo)識(shí)符是開(kāi)發(fā)人員在程序中自定義的一些符號(hào)和名稱,如變量名、函數(shù)名等。標(biāo)識(shí)符由字母、下劃線和數(shù)字組成,且不能以數(shù)字開(kāi)頭。Python中的標(biāo)識(shí)符區(qū)分大小寫(xiě),即對(duì)大小寫(xiě)敏感。2024/5/1125Python編程規(guī)范標(biāo)識(shí)符的一般命名規(guī)則如下:(1)見(jiàn)名知意。選取一個(gè)有意義的名字,盡量做到見(jiàn)其名知其意,以提高代碼的可讀性。比如:名字定義為name,學(xué)生定義為student。(2)駝峰命名法。顧名思義,標(biāo)識(shí)符名稱像駱駝的駝峰一樣有高有低,名稱中有大寫(xiě)和小寫(xiě)區(qū)隔。小駝峰式命名法(lowercamelcase)是第一個(gè)單詞的首字母小寫(xiě),第二個(gè)單詞的首字母大寫(xiě),如myName、aDog;大駝峰式命名法(uppercamelcase)是每一個(gè)單詞的首字母都采用大寫(xiě)形式,如FirstName、LastName。除此之外,在程序員中還有一種命名法比較流行,即用下劃線“_”來(lái)連接所有單詞,如send_buf。8.關(guān)鍵字關(guān)鍵字是Python中一些具有特殊功能的標(biāo)識(shí)符,為了避免混淆,不允許開(kāi)發(fā)者定義和Python關(guān)鍵字名稱相同的標(biāo)識(shí)符。查看Python保留關(guān)鍵字的方法如下:2024/5/1126importkeywordaskw#導(dǎo)入關(guān)鍵字模塊kw.kwlistPython編程規(guī)范9.__name__屬性通過(guò)Python程序的__name__屬性可以識(shí)別程序的使用方式:●如果程序作為模塊被導(dǎo)入,則其__name__屬性值會(huì)被自動(dòng)設(shè)置為模塊名?!袢绻绦蜃鳛槌绦蛑苯舆\(yùn)行,則其__name__屬性值會(huì)被自動(dòng)設(shè)置為字符串__main__。2024/5/1127標(biāo)準(zhǔn)庫(kù)與擴(kuò)展庫(kù)對(duì)象的導(dǎo)入與使用Python的默認(rèn)安裝僅包含基本或核心模塊,啟動(dòng)時(shí)也僅加載了基本模塊,需要時(shí)再顯式地導(dǎo)入和加載標(biāo)準(zhǔn)庫(kù)或第三方擴(kuò)展庫(kù),這樣可以減小程序運(yùn)行的壓力,并且具有很強(qiáng)的可擴(kuò)展性。從“木桶原理”的角度來(lái)看,這樣的設(shè)計(jì)與安全配置時(shí)遵循“最小權(quán)限”原則的思想是一致的,有助于提高系統(tǒng)的安全性。程序庫(kù)的導(dǎo)入方式有以下幾種:(1)import模塊名[as別名]:導(dǎo)入整個(gè)模塊,方括號(hào)內(nèi)為可選內(nèi)容。示例程序如下:2024/5/1128標(biāo)準(zhǔn)庫(kù)與擴(kuò)展庫(kù)對(duì)象的導(dǎo)入與使用(2)from模塊名import對(duì)象名[as別名]:導(dǎo)入模塊指定對(duì)象。示例程序如下:2024/5/1129標(biāo)準(zhǔn)庫(kù)與擴(kuò)展庫(kù)對(duì)象的導(dǎo)入與使用(3)from模塊名import*,導(dǎo)入模塊中所有函數(shù)。示例程序如下:2024/5/1130Python魔法命令Python提供了許多魔法命令,使得在IPython環(huán)境中的操作更加得心應(yīng)手。魔法命令均以“%”或者“%%”開(kāi)頭:●以“%”開(kāi)頭的稱為行命令:行命令只對(duì)命令所在的行有效。●以“%%”開(kāi)頭的稱為單元命令,單元命令必須出現(xiàn)在單元的第一行,對(duì)整個(gè)單元的代碼都有效。例如,“%matplotlibinline”命令可以將matplotlib的圖表直接嵌入JupyterNotebook。執(zhí)行“%magic”可以查看關(guān)于各個(gè)魔法命令的說(shuō)明。常用魔法命令的示例如下:●%runfile[args]:運(yùn)行腳本?!?debug和%pdb:快速debug?!?time和%timeit:運(yùn)行時(shí)間分析?!?pwd和%ls:顯示當(dāng)前目錄和目錄內(nèi)容?!?cddirname:工作目錄切換。2024/5/1131PythonShell命令PythonShell是最簡(jiǎn)單的以命令行方式運(yùn)行和調(diào)試Python程序的方法。例如:●命令行輸入“Python”,即進(jìn)入Shell模式?!衩钚休斎搿癷Python”,即進(jìn)入交互式Shell模式?!衩钚休斎搿癙ython(或iPython)文件名.py”,即執(zhí)行對(duì)應(yīng)的Python程序?!衩钚休斎搿癷Python文件名.ipynb”,即執(zhí)行JupyterNotebook環(huán)境編寫(xiě)格式的Python程序。進(jìn)入PythonShell模式窗口,在命令行提示符后面即可輸入Python代碼。如果要退出當(dāng)前模式,輸入“exit()”后回車(chē)即可。在PythonShell模式窗口,還可使用“!”符號(hào)調(diào)用操作系統(tǒng)中的Shell命令,如在Windows平臺(tái)中輸入“!dir”,即可調(diào)用dir命令來(lái)顯示當(dāng)前目錄下的文件和文件夾列表。另外,在PythonShell及其他開(kāi)發(fā)環(huán)境中,一般可以使用自動(dòng)補(bǔ)全(autocompletion)功能,即在對(duì)象后面輸入對(duì)象訪問(wèn)符“.”后,按Tab鍵自動(dòng)顯示該對(duì)象的相關(guān)屬性和方法,以方便代碼的編寫(xiě);還可使用dir函數(shù)查看指定對(duì)象的屬性和函數(shù)列表,在具體函數(shù)名后添加問(wèn)號(hào)“?”即可查看該函數(shù)的詳細(xì)說(shuō)明。2024/5/1132基本輸出和輸入1.基本輸出Python內(nèi)置函數(shù)print用于輸出信息到標(biāo)準(zhǔn)控制臺(tái)或指定文件,語(yǔ)法格式為:print(value1,value2,…,sep=,end=\n,file=sys.stdout,flush=False)●sep參數(shù)之前為需要輸出的內(nèi)容(可以有多個(gè));●sep參數(shù)用于指定數(shù)據(jù)之間的分隔符,默認(rèn)為空格;●end參數(shù)用于指定輸出完數(shù)據(jù)之后再輸出什么字符。例如:print(helloworld\n)#\n為換行符,即換行輸出2.基本輸入在Python中,獲取鍵盤(pán)輸入數(shù)據(jù)的方法是采用input函數(shù),它接受表達(dá)式輸入,并把表達(dá)式的結(jié)果賦值給等號(hào)左邊的變量。不論用戶輸入什么內(nèi)容,input一律返回字符串,必要時(shí)可以使用內(nèi)置函數(shù)int、float或eval對(duì)用戶輸入的內(nèi)容進(jìn)行類(lèi)型轉(zhuǎn)換。示例程序如下:2024/5/1133選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)絕大部分合法的Python表達(dá)式都可以作為條件表達(dá)式。在選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,條件表達(dá)式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元組、空集合、空字典、空字符串、空range對(duì)象或其他空迭代對(duì)象,Python解釋器均認(rèn)為其與True等價(jià)。在Python語(yǔ)法中,條件表達(dá)式中不允許使用賦值運(yùn)算符“=”,以避免誤將關(guān)系運(yùn)算符“==”寫(xiě)作賦值運(yùn)算符“=”帶來(lái)的麻煩。在條件表達(dá)式中使用賦值運(yùn)算符“=”將提示語(yǔ)法錯(cuò)誤。部分示例程序如下:2024/5/1134選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)(二)選擇結(jié)構(gòu)常見(jiàn)的選擇結(jié)構(gòu)有單分支選擇結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)、多分支選擇結(jié)構(gòu)以及嵌套的分支結(jié)構(gòu),也可以構(gòu)造跳轉(zhuǎn)表來(lái)實(shí)現(xiàn)類(lèi)似邏輯。循環(huán)結(jié)構(gòu)和異常處理結(jié)構(gòu)中帶有“else”子句時(shí),也可以看作特殊形式的選擇結(jié)構(gòu)。(1)單分支選擇結(jié)構(gòu)。if表達(dá)式:語(yǔ)句塊(2)雙分支選擇結(jié)構(gòu)。if表達(dá)式:語(yǔ)句塊1else:語(yǔ)句塊2雙分支選擇結(jié)構(gòu)示例程序如下:2024/5/1135選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)Python提供了一個(gè)三元運(yùn)算符,并且在三元運(yùn)算符構(gòu)成的表達(dá)式中還可以嵌套三元運(yùn)算符,實(shí)現(xiàn)與選擇結(jié)構(gòu)相似的功能。語(yǔ)法為:value1ifconditionelsevalue2當(dāng)條件表達(dá)式condition的值與True等價(jià)時(shí),表達(dá)式的值為value1,否則表達(dá)式的值為value2。例如,“b=6if5>13else9”,由于條件表達(dá)式“5>13”不為T(mén)rue,所以結(jié)果是b=9。(3)多分支選擇結(jié)構(gòu)。if表達(dá)式1:語(yǔ)句塊1elif表達(dá)式2:語(yǔ)句塊2elif表達(dá)式3:語(yǔ)句塊3……else:語(yǔ)句塊n#注:關(guān)鍵字elif是elseif的縮寫(xiě)。2024/5/1136選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)示例程序如下:2024/5/1137#示例:使用多分支選擇結(jié)構(gòu)將成績(jī)從百分制變換為等級(jí)制deffunc(score):ifscore>100orscore<0:return“wrongscore.mustbetween0and100.”elifscore>=90:return“A”elifscore>=80:return“B”elifscore>=70:return“C”elifscore>=60:return“D”else:return“F”另外,選擇結(jié)構(gòu)可以嵌套,但縮進(jìn)必須正確并且一致。選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)(三)循環(huán)結(jié)構(gòu)Python主要有for循環(huán)和while循環(huán)兩種循環(huán)結(jié)構(gòu),多個(gè)循環(huán)可以嵌套使用,并且經(jīng)常使用結(jié)構(gòu)嵌套來(lái)實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。while循環(huán)一般用于循環(huán)次數(shù)難以提前確定的情況,當(dāng)然也可以用于循環(huán)次數(shù)確定的情況;for循環(huán)一般用于循環(huán)次數(shù)可以提前確定的情況,尤其適用于枚舉和遍歷序列或迭代對(duì)象中元素的場(chǎng)合。對(duì)于帶有else子句的循環(huán)結(jié)構(gòu),如果循環(huán)是因?yàn)闂l件表達(dá)式不成立或序列遍歷結(jié)束而自然結(jié)束,則執(zhí)行else結(jié)構(gòu)中的語(yǔ)句;如果循環(huán)是因?yàn)閳?zhí)行了break語(yǔ)句而導(dǎo)致提前結(jié)束,則不會(huì)執(zhí)行else結(jié)構(gòu)中的語(yǔ)句。(1)基本語(yǔ)法。兩種循環(huán)結(jié)構(gòu)的完整語(yǔ)法形式分別為:2024/5/1138while循環(huán)基本語(yǔ)法for循環(huán)基本語(yǔ)法while條件表達(dá)式:循環(huán)體[else:else子句代碼塊]for取值in序列或迭代對(duì)象:循環(huán)體[else:else子句代碼塊]選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)示例程序如下:2024/5/1139#示例:打印九九乘法表foriinrange(1,10):forjinrange(1,i+1):print({0}*{1}={2}.format(i,j,i*j),end=)print()#打印空行選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)(2)break與continue語(yǔ)句。一旦break語(yǔ)句被執(zhí)行,將使得break語(yǔ)句所屬層次的循環(huán)提前結(jié)束。continue語(yǔ)句的作用是提前結(jié)束本次循環(huán),忽略continue之后的所有語(yǔ)句,提前進(jìn)入下一次循環(huán)。下面的示例為:輸入若干個(gè)成績(jī),求所有成績(jī)的平均分,每輸入一個(gè)成績(jī)后詢問(wèn)是否繼續(xù)輸入下一個(gè)成績(jī),回答“yes”就繼續(xù)輸入下一個(gè)成績(jī),回答“no”就停止輸入成績(jī)。2024/5/1140運(yùn)算符、表達(dá)式與內(nèi)置對(duì)象2024/5/1141Python常用內(nèi)置對(duì)象對(duì)象是Python語(yǔ)言中最基本的概念,在Python中處理的一切都是對(duì)象。Python中有許多內(nèi)置對(duì)象可供編程者使用,內(nèi)置對(duì)象可直接使用,如數(shù)字、字符串、列表、字典等。非內(nèi)置對(duì)象需要導(dǎo)入模塊才能使用,如正弦函數(shù)sin(x),隨機(jī)數(shù)產(chǎn)生函數(shù)random()等。2024/5/1142Python常用內(nèi)置對(duì)象2024/5/1143對(duì)象類(lèi)型類(lèi)型名稱示例簡(jiǎn)要說(shuō)明數(shù)字intfloatcomplex12343.14,1.3e53+4j數(shù)字大小沒(méi)有限制,內(nèi)置支持復(fù)數(shù)及其運(yùn)算字符串str'swfu',"I'mstudent",'''Python''',r'abc',R'bcd'使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符,以字母r或R引導(dǎo)的表示原始字符串字節(jié)串bytesb'helloworld'以字母b引導(dǎo),可以使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符列表list[1,2,3]['a','b',['c',2]]所有元素放在一對(duì)方括號(hào)中,元素之間使用逗號(hào)分隔,其中的元素可以是任意類(lèi)型字典dict{1:'food',2:'taste',3:'import'}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素形式為“鍵:值”元組tuple(2,-5,6)(3,)不可變,所有元素放在一對(duì)圓括號(hào)中,元素之間使用逗號(hào)分隔,如果元組中只有一個(gè)元素的話,后面的逗號(hào)不能省略集合setfrozenset{'a','b','c'}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素不允許重復(fù);另外,set是可變的,而frozenset是不可變的Python常用內(nèi)置對(duì)象2024/5/1144對(duì)象類(lèi)型類(lèi)型名稱示例簡(jiǎn)要說(shuō)明布爾型boolTrue,False邏輯值,關(guān)系運(yùn)算符、成員測(cè)試運(yùn)算符、同一性測(cè)試運(yùn)算符組成的表達(dá)式的值一般為T(mén)rue或False空類(lèi)型NoneTypeNone空值異常ExceptionValueErrorTypeError

Python內(nèi)置大量異常類(lèi),分別對(duì)應(yīng)不同類(lèi)型的異常文件

f=

open('data.dat','rb')open是Python內(nèi)置函數(shù),使用指定的模式打開(kāi)文件,返回文件對(duì)象其他可迭代對(duì)象

生成器對(duì)象、range對(duì)象、zip對(duì)象、enumerate對(duì)象、map對(duì)象、filter對(duì)象等等具有惰性求值的特點(diǎn),除range對(duì)象之外,其他對(duì)象中的元素只能看一次編程單元

函數(shù)(使用def定義)類(lèi)(使用class定義)模塊(類(lèi)型為module)類(lèi)和函數(shù)都屬于可調(diào)用對(duì)象,模塊用來(lái)集中存放函數(shù)、類(lèi)、常量或其他對(duì)象常量與變量在Python中,不需要事先聲明變量名及其類(lèi)型,直接賦值即可創(chuàng)建各種類(lèi)型的對(duì)象變量。這一點(diǎn)適用于Python任意類(lèi)型的對(duì)象。例如語(yǔ)句>>>x=3創(chuàng)建了整型變量x,并賦值為3,再例如語(yǔ)句>>>x='Helloworld.'創(chuàng)建了字符串變量x,并賦值為'Helloworld.'。45憑空出現(xiàn)一個(gè)整型變量x新的字符串變量,再也不是原來(lái)的x了常量與變量賦值語(yǔ)句的執(zhí)行過(guò)程是:首先把等號(hào)右側(cè)表達(dá)式的值計(jì)算出來(lái),然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址。>>>x=3Python中的變量并不直接存儲(chǔ)值,而是存儲(chǔ)了值的內(nèi)存地址或者引用,這也是變量類(lèi)型隨時(shí)可以改變的原因。46常量與變量Python屬于強(qiáng)類(lèi)型編程語(yǔ)言,Python解釋器會(huì)根據(jù)賦值或運(yùn)算來(lái)自動(dòng)推斷變量類(lèi)型。Python還是一種動(dòng)態(tài)類(lèi)型語(yǔ)言,變量的類(lèi)型也是可以隨時(shí)變化的。>>>x=3>>>print(type(x))<class'int'>>>>x='Helloworld.'>>>print(type(x))#查看變量類(lèi)型<class'str'>>>>x=[1,2,3]>>>print(type(x))<class'list'>>>>isinstance(3,int)#測(cè)試對(duì)象是否是某個(gè)類(lèi)型的實(shí)例True>>>isinstance('Helloworld',str)True47常量與變量在定義變量名的時(shí)候,需要注意以下問(wèn)題:變量名必須以字母或下劃線開(kāi)頭,但以下劃線開(kāi)頭的變量在Python中有特殊含義;變量名中不能有空格以及標(biāo)點(diǎn)符號(hào)(括號(hào)、引號(hào)、逗號(hào)、斜線、反斜線、冒號(hào)、句號(hào)、問(wèn)號(hào)等等);不能使用關(guān)鍵字作變量名,可以導(dǎo)入keyword模塊后使用print(keyword.kwlist)查看所有Python關(guān)鍵字;變量名對(duì)英文字母的大小寫(xiě)敏感,例如student和Student是不同的變量。不建議使用系統(tǒng)內(nèi)置的模塊名、類(lèi)型名或函數(shù)名以及已導(dǎo)入的模塊名及其成員名作變量名,這將會(huì)改變其類(lèi)型和含義。48數(shù)字在Python中,內(nèi)置的數(shù)字類(lèi)型有整數(shù)、實(shí)數(shù)和復(fù)數(shù)。整數(shù)類(lèi)型除了常見(jiàn)的十進(jìn)制整數(shù),還有:二進(jìn)制。以0b開(kāi)頭,每一位只能是0或1。八進(jìn)制。以0o開(kāi)頭,每一位只能是0、1、2、3、4、5、6、7這八個(gè)數(shù)字之一。十六進(jìn)制。以0x開(kāi)頭,每一位只能是0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f之一。49數(shù)字Python支持任意大的數(shù)字,具體可以大到什么程度僅受內(nèi)存大小的限制。由于精度的問(wèn)題,對(duì)于實(shí)數(shù)運(yùn)算可能會(huì)有一定的誤差,應(yīng)盡量避免在實(shí)數(shù)之間直接進(jìn)行相等性測(cè)試,而是應(yīng)該以二者之差的絕對(duì)值是否足夠小作為兩個(gè)實(shí)數(shù)是否相等的依據(jù)。在數(shù)字的算術(shù)運(yùn)算表達(dá)式求值時(shí)會(huì)進(jìn)行隱式的類(lèi)型轉(zhuǎn)換,如果存在復(fù)數(shù)則都變成復(fù)數(shù),如果沒(méi)有復(fù)數(shù)但是有實(shí)數(shù)就都變成實(shí)數(shù),如果都是整數(shù)則不進(jìn)行類(lèi)型轉(zhuǎn)換(/運(yùn)算符除外)。50數(shù)字>>>9999**99#這里**是冪乘運(yùn)算符,等價(jià)于內(nèi)置函數(shù)pow()990148353526723487602263124753282625570559528895791057324326529121794837894053513464422176826916433932586924386677766244032001623756821400432975051208820204980098735552703841362304669970510691243800218202840374329378800694920309791954185117798434329591212159106298699938669908067573374724331208942425544893910910073205049031656789220889560732962926226305865706593594917896276756396848514900989999>>>0.3+0.2#實(shí)數(shù)相加0.5>>>0.4-0.1#實(shí)數(shù)相減,結(jié)果稍微有點(diǎn)偏差0.30000000000000004>>>0.4-0.1==0.3#應(yīng)盡量避免直接比較兩個(gè)實(shí)數(shù)是否相等False>>>abs(0.4-0.1-0.3)<1e-6#這里1e-6表示10的-6次方True51數(shù)字Python內(nèi)置支持復(fù)數(shù)類(lèi)型及其運(yùn)算,并且形式與數(shù)學(xué)上的復(fù)數(shù)完全一致。>>>x=3+4j#使用j或J表示復(fù)數(shù)虛部>>>y=5+6j>>>x+y#支持復(fù)數(shù)之間的加、減、乘、除以及冪乘等運(yùn)算(8+10j)>>>x*y(-9+38j)>>>abs(x)#內(nèi)置函數(shù)abs()可用來(lái)計(jì)算復(fù)數(shù)的模5.0>>>x.imag#虛部4.0>>>x.real#實(shí)部3.0>>>x.conjugate()#共軛復(fù)數(shù)(3-4j)52數(shù)字Python3.6以上版本支持在數(shù)字中間位置使用單個(gè)下劃線作為分隔來(lái)提高數(shù)字的可讀性,類(lèi)似于數(shù)學(xué)上使用逗號(hào)作為千位分隔符。在Python數(shù)字中單個(gè)下劃線可以出現(xiàn)在中間任意位置,但不能出現(xiàn)開(kāi)頭和結(jié)尾位置,也不能使用多個(gè)連續(xù)的下劃線。>>>1_000_0001000000>>>1_2_3_41234>>>1_2+3_4j(12+34j)>>>1_2.3_4512.34553字符串簡(jiǎn)介在Python中,字符串屬于不可變有序序列,使用單引號(hào)、雙引號(hào)、三單引號(hào)或三雙引號(hào)作為定界符,并且不同的定界符之間可以互相嵌套。'abc'、'123'、'中國(guó)'"Python"'''Tomsaid,"Let'sgo"'''54字符串簡(jiǎn)介除了支持序列通用方法(包括雙向索引、比較大小、計(jì)算長(zhǎng)度、元素訪問(wèn)、切片、成員測(cè)試等操作)以外,字符串類(lèi)型還支持一些特有的操作方法,例如字符串格式化、查找、替換、排版等等。字符串屬于不可變序列,不能直接對(duì)字符串對(duì)象進(jìn)行元素增加、修改與刪除等操作,切片操作也只能訪問(wèn)其中的元素而無(wú)法使用切片來(lái)修改字符串中的字符。55字符串在Python中,沒(méi)有字符常量和變量的概念,只有字符串類(lèi)型的常量和變量,單個(gè)字符也是字符串。使用單引號(hào)、雙引號(hào)、三單引號(hào)、三雙引號(hào)作為定界符(delimiter)來(lái)表示字符串,并且不同的定界符之間可以互相嵌套。Python3.x全面支持中文,中文和英文字母都作為一個(gè)字符對(duì)待,甚至可以使用中文作為變量名。除了支持使用加號(hào)運(yùn)算符連接字符串以外,Python字符串還提供了大量的方法支持格式化、查找、替換、排版等操作。56字符串>>>x='Helloworld.'#使用單引號(hào)作為定界符>>>x="Pythonisagreatlanguage."#使用雙引號(hào)作為定界符>>>x='''Tomsaid,"Let'sgo."'''#不同定界符之間可以互相嵌套>>>print(x)Tomsaid,"Let'sgo.">>>x='good'+'morning'#連接字符串>>>x'goodmorning'>>>x='good''morning'#連接字符串,僅適用于字符串常量>>>x'goodmorning'>>>x='good'>>>x=x'morning'#不適用于字符串變量SyntaxError:invalidsyntax>>>x=x+'morning'#字符串變量之間的連接可以使用加號(hào)>>>x'goodmorning'57字符串編碼最早的字符串編碼是美國(guó)標(biāo)準(zhǔn)信息交換碼ASCII,僅對(duì)10個(gè)數(shù)字、26個(gè)大寫(xiě)英文字母、26個(gè)小寫(xiě)英文字母及一些其他符號(hào)進(jìn)行了編碼。ASCII碼采用1個(gè)字節(jié)來(lái)對(duì)字符進(jìn)行編碼,最多只能表示256個(gè)符號(hào)。58字符串編碼GB2312是我國(guó)制定的中文編碼,使用1個(gè)字節(jié)表示英語(yǔ),2個(gè)字節(jié)表示中文;GBK是GB2312的擴(kuò)充,而CP936是微軟在GBK基礎(chǔ)上開(kāi)發(fā)的編碼方式。GB2312、GBK和CP936都是使用2個(gè)字節(jié)表示中文。GB2312(1980年)一共收錄了7445個(gè)字符,包括6763個(gè)漢字和682個(gè)其它符號(hào)。漢字區(qū)的內(nèi)碼范圍高字節(jié)從B0-F7,低字節(jié)從A1-FE,占用的碼位是72*94=6768。其中有5個(gè)空位是D7FA-D7FEGB18030是最新的漢字編碼字符集國(guó)家標(biāo)準(zhǔn),向下兼容GBK和GB2312標(biāo)準(zhǔn)。GB18030編碼是一二四字節(jié)變長(zhǎng)編碼。一字節(jié)部分從0x0~0x7F與ASCII編碼兼容。二字節(jié)部分,首字節(jié)從0x81~0xFE,尾字節(jié)從0x40~0x7E以及0x80~0xFE,與GBK標(biāo)準(zhǔn)基本兼容。UTF-8對(duì)全世界所有國(guó)家需要用到的字符進(jìn)行了編碼,以1個(gè)字節(jié)表示英語(yǔ)字符(兼容ASCII),以3個(gè)字節(jié)表示中文,還有些語(yǔ)言的符號(hào)使用2個(gè)字節(jié)(例如俄語(yǔ)和希臘語(yǔ)符號(hào))或4個(gè)字節(jié)。59字符串編碼不同編碼格式之間相差很大,采用不同的編碼格式意味著不同的表示和存儲(chǔ)形式,把同一字符存入文件時(shí),寫(xiě)入的內(nèi)容可能會(huì)不同,在試圖理解其內(nèi)容時(shí)必須了解編碼規(guī)則并進(jìn)行正確的解碼。如果解碼方法不正確就無(wú)法還原信息,從這個(gè)角度來(lái)講,字符串編碼也具有加密的效果。60字符串編碼Python

3.x完全支持中文字符,默認(rèn)使用UTF8編碼格式,無(wú)論是一個(gè)數(shù)字、英文字母,還是一個(gè)漢字,在統(tǒng)計(jì)字符串長(zhǎng)度時(shí)都按一個(gè)字符對(duì)待和處理。>>>s=‘首都經(jīng)貿(mào)大學(xué)'>>>len(s)#字符串長(zhǎng)度,或者包含的字符個(gè)數(shù)6>>>s='首都經(jīng)貿(mào)大學(xué)ABCDE'#中文與英文字符同樣對(duì)待,都算一個(gè)字符>>>len(s)11>>>姓名='張三'#使用中文作為變量名>>>print(姓名)

#輸出變量的值張三61轉(zhuǎn)義字符62轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\b退格,把光標(biāo)移動(dòng)到前一列位置\\一個(gè)斜線\\f換頁(yè)符\’單引號(hào)’\n換行符\”雙引號(hào)”\r回車(chē)\ooo3位八進(jìn)制數(shù)對(duì)應(yīng)的字符\t水平制表符\xhh2位十六進(jìn)制數(shù)對(duì)應(yīng)的字符\v垂直制表符\uhhhh4位十六進(jìn)制數(shù)表示的Unicode字符轉(zhuǎn)義字符轉(zhuǎn)義字符用法>>>print('Hello\nWorld')#包含轉(zhuǎn)義字符的字符串HelloWorld>>>print('\101')#三位八進(jìn)制數(shù)對(duì)應(yīng)的字符A>>>print('\x41')#兩位十六進(jìn)制數(shù)對(duì)應(yīng)的字符A>>>print('我是\u4ed8\u4e1c\u666e')#四位十六進(jìn)制數(shù)表示Unicode字符,使用hex(ord('付'))方式獲取unicode的十六進(jìn)制編碼我是付東普63轉(zhuǎn)義字符為了避免對(duì)字符串中的轉(zhuǎn)義字符進(jìn)行轉(zhuǎn)義,可以使用原始字符串,在字符串前面加上字母r或R表示原始字符串,其中的所有字符都表示原始的含義而不會(huì)進(jìn)行任何轉(zhuǎn)義。>>>path='C:\Windows\notepad.exe'>>>print(path)#字符\n被轉(zhuǎn)義為換行符C:\Windowsotepad.exe>>>path=r'C:\Windows\notepad.exe'#原始字符串,任何字符都不轉(zhuǎn)義>>>print(path)C:\Windows\notepad.exe64字符串格式化1使用%運(yùn)算符進(jìn)行格式化2使用format方法進(jìn)行格式化3格式化的字符串常量65使用%運(yùn)算符進(jìn)行格式化66使用%運(yùn)算符進(jìn)行格式化常用格式字符67格式字符說(shuō)明%s字符串(采用str()的顯示)%r字符串(采用repr()的顯示)%c單個(gè)字符%d十進(jìn)制整數(shù)%i十進(jìn)制整數(shù)%o八進(jìn)制整數(shù)%x十六進(jìn)制整數(shù)%e指數(shù)(基底寫(xiě)為e)%E指數(shù)(基底寫(xiě)為E)%f、%F浮點(diǎn)數(shù)%g指數(shù)(e)或浮點(diǎn)數(shù)(根據(jù)顯示長(zhǎng)度)%G指數(shù)(E)或浮點(diǎn)數(shù)(根據(jù)顯示長(zhǎng)度)%%一個(gè)字符"%"使用%運(yùn)算符進(jìn)行格式化>>>x=1235>>>so="%o"%x>>>so"2323">>>sh="%x"%x>>>sh"4d3">>>se="%e"%x>>>se"1.235000e+03">>>chr(ord("3")+1)"4">>>"%s"%65"65">>>"%s"%65333"65333">>>"%d"%"555"TypeError:%dformat:anumberisrequired,notstr68使用format()方法進(jìn)行格式化>>>1/30.3333333333333333>>>print('{0:.3f}'.format(1/3))#保留3位小數(shù)0.333>>>'{0:%}'.format(3.5)#格式化為百分?jǐn)?shù)'350.000000%'>>>'{0:_},{0:_x}'.format(1000000)#Python

3.6.0及更高版本支持'1_000_000,f_4240'>>>'{0:_},{0:_x}'.format(10000000)#Python

3.6.0及更高版本支持'10_000_000,98_9680'69使用format()方法進(jìn)行格式化>>>print("Thenumber{0:,}inhexis:{0:#x},thenumber{1}inoctis{1:#o}".format(5555,55))Thenumber5,555inhexis:0x15b3,thenumber55inoctis0o67>>>print("Thenumber{1:,}inhexis:{1:#x},thenumber{0}inoctis{0:o}".format(5555,55))Thenumber55inhexis:0x37,thenumber5555inoctis12663>>>print("mynameis{name},myageis{age},andmyQQis{qq}".format(name="首經(jīng)貿(mào)",age=60,qq="80646****"))mynameis首經(jīng)貿(mào),myageis60,andmyQQis80646****>>>position=(5,8,13)>>>print("X:{0[0]};Y:{0[1]};Z:{0[2]}".format(position))X:5;Y:8;Z:1370格式化的字符串常量從Python3.6.x開(kāi)始支持一種新的字符串格式化方式,官方叫做FormattedStringLiterals,在字符串前加字母f,含義與字符串對(duì)象format()方法類(lèi)似。>>>name='Fu'>>>age=39>>>f'Mynameis{name},andIam{age}yearsold.''MynameisFu,andIam39yearsold.'>>>width=10>>>precision=4>>>value=11/3>>>f'result:{value:{width}.{precision}}''result:3.667'71字符串常用方法與操作Python字符串對(duì)象提供了大量方法用于字符串的切分、連接、替換和排版等操作,另外還有大量?jī)?nèi)置函數(shù)和運(yùn)算符也支持對(duì)字符串的操作。字符串對(duì)象是不可變的,所以字符串對(duì)象提供的涉及到字符串“修改”的方法都是返回修改后的新字符串,并不對(duì)原始字符串做任何修改,無(wú)一例外。72find()、rfind()、index()、rindex()、count()find()、rfind()、index()、rindex()、count()find()和rfind方法分別用來(lái)查找一個(gè)字符串在另一個(gè)字符串指定范圍(默認(rèn)是整個(gè)字符串)中首次和最后一次出現(xiàn)的位置,如果不存在則返回-1;index()和rindex()方法用來(lái)返回一個(gè)字符串在另一個(gè)字符串指定范圍中首次和最后一次出現(xiàn)的位置,如果不存在則拋出異常;count()方法用來(lái)返回一個(gè)字符串在當(dāng)前字符串中出現(xiàn)的次數(shù)。73find()、rfind()、index()、rindex()、count()74>>>s="apple,peach,banana,peach,pear">>>s.find("peach")6>>>s.find("peach",7)19>>>s.find("peach",7,20)-1>>>s.rfind('p')25>>>s.index('p')1>>>s.index('pe')6split()、rsplit()、partition()、rpartition()split()、rsplit()、partition()、rpartition()split()和rsplit()方法分別用來(lái)以指定字符為分隔符,把當(dāng)前字符串從左往右或從右往左分隔成多個(gè)字符串,并返回包含分隔結(jié)果的列表;partition()和rpartition()用來(lái)以指定字符串為分隔符將原字符串分隔為3部分,即分隔符前的字符串、分隔符字符串、分隔符后的字符串,如果指定的分隔符不在原字符串中,則返回原字符串和兩個(gè)空字符串。75split()、rsplit()、partition()、rpartition()76>>>s="apple,peach,banana,pear">>>s.split(",")["apple","peach","banana","pear"]>>>s.partition(',')('apple',',','peach,banana,pear')>>>s.rpartition(',')('apple,peach,banana',',','pear')>>>s.rpartition('banana')('apple,peach,','banana',',pear')>>>s="2017-10-31">>>t=s.split("-")>>>print(t)['2017','10','31']>>>print(list(map(int,t)))[2017,10,31]split()、rsplit()、partition()、rpartition()77split()和rsplit()方法還允許指定最大分割次數(shù)。>>>s='\n\nhello\t\tworld\n\n\nMynameisDong'>>>s.split(None,1)['hello','world\n\n\nMynameisDong']>>>s.rsplit(None,2)['\n\nhello\t\tworld\n\n\nMyname','is','Dong']>>>s.split(maxsplit=6)['hello','world','My','name','is','Dong']>>>s.split(maxsplit=100)#最大分隔次數(shù)大于可分隔次數(shù)時(shí)無(wú)效['hello','world','My','name','is','Dong']split()、rsplit()、partition()、rpartition()78對(duì)于split()和rsplit()方法,如果不指定分隔符,則字符串中的任何空白符號(hào)(空格、換行符、制表符等)都將被認(rèn)為是分隔符,把連續(xù)多個(gè)空白字符看作一個(gè)分隔符。>>>s='helloworld\n\nMynameisDong'>>>s.split()['hello','world','My','name','is','Dong']>>>s='\n\nhelloworld\n\n\nMynameisDong'>>>s.split()['hello','world','My','name','is','Dong']>>>s='\n\nhello\t\tworld\n\n\nMyname\tisDong'>>>s.split()['hello','world','My','name','is','Dong']split()、rsplit()、partition()、rpartition()79然而,明確傳遞參數(shù)指定split()使用的分隔符時(shí),情況是不一樣的。>>>'a,,,bb,,ccc'.split(',')#每個(gè)逗號(hào)都被作為獨(dú)立的分隔符['a','','','bb','','ccc']>>>'a\t\t\tbb\t\tccc'.split('\t')#每個(gè)制表符都被作為獨(dú)立的分隔符['a','','','bb','','ccc']>>>'a\t\t\tbb\t\tccc'.split()#連續(xù)多個(gè)制表符被作為一個(gè)分隔符['a','bb','ccc']join()字符串連接join()>>>li=["apple","peach","banana","pear"]>>>','.join(li)'apple,peach,banana,pear'>>>'.'.join(li)'apple.peach.banana.pear'>>>'::'.join(li)'apple::peach::banana::pear'lower()、upper()、capitalize()、title()、swapcase()81lower()、upper()、capitalize()、title()、swapcase()>>>s="WhatisYourName?">>>s.lower()#返回小寫(xiě)字符串'whatisyourname?'>>>s.upper()#返回大寫(xiě)字符串'WHATISYOURNAME?'>>>s.capitalize()#字符串首字符大寫(xiě)'Whatisyourname?'>>>s.title()#每個(gè)單詞的首字母大寫(xiě)'WhatIsYourName?'>>>s.swapcase()#大小寫(xiě)互換'wHATISyOURnAME?'82查找替換replace(),類(lèi)似于Word中的“全部替換”功能。>>>s="中國(guó),中國(guó)">>>print(s)中國(guó),中國(guó)>>>s2=s.replace("中國(guó)","中華人民共和國(guó)")#兩個(gè)參數(shù)都作為一個(gè)整理>>>print(s2)中華人民共和國(guó),中華人民共和國(guó)replace()、maketrans()、translate()replace()、maketrans()、translate()83字符串對(duì)象的maketrans()方法用來(lái)生成字符映射表,而translate()方法用來(lái)根據(jù)映射表中定義的對(duì)應(yīng)關(guān)系轉(zhuǎn)換字符串并替換其中的字符,使用這兩個(gè)方法的組合可以同時(shí)處理多個(gè)字符。#創(chuàng)建映射表,將字符"abcdef123"一一對(duì)應(yīng)地轉(zhuǎn)換為"uvwxyz@#$">>>table=''.maketrans('abcdef123','uvwxyz@#$')>>>s="Python

isagreateprogramminglanguage.Ilikeit!"#按映射表進(jìn)行替換>>>s.translate(table)'Python

isugryutyprogrumminglunguugy.Ilikyit!'replace()、maketrans()、translate()例:使用maketrans()和translate()方法實(shí)現(xiàn)了凱撒加密算法,其中k表示算法秘鑰,也就是把每個(gè)英文字母變?yōu)槠浜竺娴牡趲讉€(gè)字母。>>>importstring>>>defkaisa(s,k):lower=string.ascii_lowercase#小寫(xiě)字母upper=string.ascii_uppercase#大寫(xiě)字母before=string.ascii_lettersafter=lower[k:]+lower[:k]+upper[k:]+upper[:k]table=''.maketrans(before,after)#創(chuàng)建映射表returns.translate(table)>>>s="Python

isagreateprogramminglanguage.Ilikeit!">>>kaisa(s,3)'Sbwkrqlvdjuhdwhsurjudpplqjodqjxdjh.Lolnhlw!'84strip()、rstrip()、lstrip()85strip()、rstrip()、lstrip()>>>s="abc">>>s.strip()#刪除空白字符'abc'>>>'\n\nhelloworld\n\n'.strip()#刪除空白字符'helloworld'>>>"aaaassddf".strip("a")#刪除指定字符'ssddf'>>>"aaaassddf".strip("af")'ssdd'>>>"aaaassddfaaa".rstrip("a")#刪除字符串右端指定字符'aaaassddf'>>>"aaaassddfaaa".lstrip("a")#刪除字符串左端指定字符'ssddfaaa'strip()、rstrip()、lstrip()86這三個(gè)函數(shù)的參數(shù)指定的字符串并不作為一個(gè)整體對(duì)待,而是在原字符串的兩側(cè)、右側(cè)、左側(cè)刪除參數(shù)字符串中包含的所有字符,一層一層地從外往里扒。>>>'aabbccddeeeffg'.strip('gbaefcd')''startswith()、endswith()87s.startswith(t)、s.endswith(t),判斷字符串是否以指定字符串開(kāi)始或結(jié)束>>>s='Beautifulisbetterthanugly.'>>>s.startswith('Be')#檢測(cè)整個(gè)字符串True>>>s.startswith('Be',5)#指定檢測(cè)范圍起始位置False>>>s.startswith('Be',0,5)#指定檢測(cè)范圍起始和結(jié)束位置True>>>importos>>>[filenameforfilenameinos.listdir(r'c:\\')iffilename.endswith(('.bmp','.jpg','.gif'))]isalnum,isalpha,isdigit,isspace,isupper,islower88isalnum()、isalpha()、isdigit()、isspace()、isupper()、islower(),用來(lái)測(cè)試字符串是否為數(shù)字或字母、是否為字母、是否為數(shù)字字符、是否為空白字符、是否為大寫(xiě)字母以及是否為小寫(xiě)字母。>>>'1234abcd'.isalnum()True>>>'1234abcd'.isalpha()#全部為英文字母時(shí)返回TrueFalse>>>'1234abcd'.isdigit()#全部為數(shù)字時(shí)返回TrueFalse>>>'abcd'.isalpha()True>>>'1234.0'.isdigit()Falsecenter()、ljust()、rjust()89center()、ljust()、rjust(),返回指定寬度的新字符串,原字符串居中、左對(duì)齊或右對(duì)齊出現(xiàn)在新字符串中,如果指定寬度大于字符串長(zhǎng)度,則使用指定的字符(默認(rèn)為空格)進(jìn)行填充。>>>'Helloworld!'.center(20)#居中對(duì)齊,以空格進(jìn)行填充'Helloworld!'>>>'Helloworld!'.center(20,'=')#居中對(duì)齊,以字符=進(jìn)行填充'====Helloworld!===='>>>'Helloworld!'.ljust(20,'=')#左對(duì)齊'Helloworld!========'>>>'Helloworld!'.rjust(20,'=')#右對(duì)齊'========Helloworld!'字符串對(duì)象支持的運(yùn)算符90Python字符串支持加法運(yùn)算符,表示兩個(gè)字符串連接,生成

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論