版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章Python的基本語(yǔ)法高等學(xué)校計(jì)算機(jī)類特別教材上海市高等學(xué)校信息技術(shù)水平考試參考教材Python程序設(shè)計(jì)基礎(chǔ)
熟悉Python的基本語(yǔ)法。理解數(shù)值類型的特點(diǎn)及其操作方法。初步掌握字符串?dāng)?shù)據(jù)類型。本章教學(xué)目標(biāo)逐步熟悉Python的基本運(yùn)算、表達(dá)式和優(yōu)先級(jí)。01Python程序的書寫格式與基本規(guī)則PARTONE2.1.1基本詞法單位標(biāo)識(shí)符用于標(biāo)識(shí)不同的詞法單位,通俗地講,就是變量、函數(shù)等對(duì)象的名稱。合法的標(biāo)識(shí)符必須遵守以下的構(gòu)成規(guī)則?!裼梢淮址M成,字符可以是任意字母、數(shù)字、下畫線、漢字,但這串字符的第一個(gè)字符不能是數(shù)字。●不能與關(guān)鍵字同名。關(guān)鍵字也稱為“保留字”,是被語(yǔ)言保留起來(lái)的、具有特殊含義的詞,不能再用于定義名稱。程序設(shè)計(jì)的基本詞法單位通常包括常量、變量、關(guān)鍵字、運(yùn)算符、表達(dá)式、函數(shù)、語(yǔ)句、類等。Python是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。對(duì)象就是把靜態(tài)特征(屬性)和動(dòng)態(tài)行為(方法)封裝在一個(gè)結(jié)構(gòu)里的事物,Python中一切皆為對(duì)象?!纠?-1】查看Python的所有關(guān)鍵字。>>>importkeyword>>>keyword.kwlist['False','None','True','and','as','assert','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']標(biāo)識(shí)符中唯一能使用的標(biāo)點(diǎn)符號(hào)只有下畫線,不能含有其他標(biāo)點(diǎn)符號(hào)(包括空格、括號(hào)、引號(hào)、逗號(hào)、斜線、反斜線、冒號(hào)、句號(hào)、問(wèn)號(hào)等)。例如,“x”“var1”“FirstName”“stu_score”“平均分2”等,都是合法的標(biāo)識(shí)符;但是,“stu-score”“FirstName”“2班平均分”都是不合法的標(biāo)識(shí)符。2.1.1基本詞法單位
Anaconda是一個(gè)Python科學(xué)計(jì)算集成開發(fā)環(huán)境的開源發(fā)行版本,可從其官網(wǎng)(見(jiàn)圖1-6)或其國(guó)內(nèi)鏡像網(wǎng)站免費(fèi)下載安裝。
Anaconda在Windows操作系統(tǒng)中安裝成功后,可見(jiàn)圖>7所示的程序組。其中包括常用的第三方包管理工具AnacondaNavigator-,命令行窗口AnacondaPrompt、交互筆記JupyterNotebook,編程環(huán)境Spyder等。2.1.1基本詞法單位
Anaconda是一個(gè)Python科學(xué)計(jì)算集成開發(fā)環(huán)境的開源發(fā)行版本,可從其官網(wǎng)(見(jiàn)圖1-6)或其國(guó)內(nèi)鏡像網(wǎng)站免費(fèi)下載安裝。
Anaconda在Windows操作系統(tǒng)中安裝成功后,可見(jiàn)圖7所示的程序組。其中包括常用的第三方包管理工具AnacondaNavigator-,命令行窗口AnacondaPrompt、交互筆記JupyterNotebook,編程環(huán)境Spyder等。2.1.1基本詞法單位
變量是指在運(yùn)行過(guò)程中值可以被修改的對(duì)象。變量的名稱除必須符合標(biāo)識(shí)符的構(gòu)成規(guī)則外,還要盡量遵循一些約定俗成的規(guī)范。2.1.1基本詞法單位除循環(huán)控制變量可以使用i或者x這樣的簡(jiǎn)單名稱外,其他變量最好使用有意義的名稱,以提高程序的可讀性。例如,表示平均分的變量應(yīng)使用average_score或者vg_score,而不建議使用as或者pjf。直接用漢字命名變量也是可以的,例如:>>>甲=2.3>>>乙=3.2>>>甲+乙5.5但由于運(yùn)算表達(dá)式中的符號(hào)都必須是英文半角符號(hào),要考慮輸入和切換的煩瑣,以及編程環(huán)境對(duì)漢字的兼容等因素,習(xí)慣上很少使用漢字命名。2.1.1基本詞法單位用英文名稱時(shí),多個(gè)單詞之間為表示區(qū)隔可用下畫線連接。Python標(biāo)識(shí)符是嚴(yán)格區(qū)分大小字母的。也就是說(shuō),Score和score會(huì)被認(rèn)為是兩個(gè)不同的對(duì)象名稱。因此,變量名可使用大小寫字母混合的方式,多個(gè)單詞之間為表示區(qū)隔也可把每個(gè)單詞的首字母大寫。用于表示固定不變值的對(duì)象(常量)名稱一般用全大寫英文字母,例如,PI、MAX_SIZE。常量通常被賦予固定值和專用對(duì)象名稱。例如,PI=3.14可表示圓周率π。在一些庫(kù)中定義了專門表示固定值的對(duì)象,例如,math.pi表示數(shù)學(xué)庫(kù)中的圓周率,tkinter.END表示圖形界面庫(kù)中的文本末尾。因?yàn)橐韵庐嬀€開頭的變量在Python中有特殊含義,所以,自定義名稱時(shí),一般不用下畫線作為開頭字符。2.1.1基本詞法單位運(yùn)算符用于指定變量/常量之間進(jìn)行何種運(yùn)算,例如,賦值、算術(shù)、比較、邏輯等。表達(dá)式由變量/常量和運(yùn)算符構(gòu)成。一個(gè)表達(dá)式中可能包含多次多種運(yùn)算,與數(shù)學(xué)表達(dá)式在形式上很接近。例如,1+2,2*(x+y),O<=a<=10等。函數(shù)是相對(duì)獨(dú)立的功能單位,可以執(zhí)行一定的任務(wù)。其形式上類似于數(shù)學(xué)函數(shù),例如,math.sin(math.pi/2)??梢允褂肞ython內(nèi)核提供的各種內(nèi)置(built-in)函數(shù),也可以使用標(biāo)準(zhǔn)模塊(如數(shù)學(xué)庫(kù)math)中的函數(shù),以及自定義函數(shù)。2.1.1基本詞法單位語(yǔ)句由表達(dá)式、函數(shù)調(diào)用組成。例如,x=1,c=math.sqr(a*a+b*b),print('Helloworld")等。另外,各種控制結(jié)構(gòu)也屬于語(yǔ)句,例如,if語(yǔ)句、for語(yǔ)句。類是相似事物的抽象。例如,張三、李四等這幾個(gè)學(xué)生都有學(xué)號(hào)、姓名、專業(yè)等屬性,也都有選課、借閱圖書等方法,可以抽象出Student類,而這些學(xué)生個(gè)體都是Student類的對(duì)象。2.1.1基本詞法單位2.1.2程序的書寫格式與基本規(guī)則在《Google開源項(xiàng)目風(fēng)格指南》中,還列出了一些常見(jiàn)的書寫格式建議。雖然并不影響程序執(zhí)行結(jié)果,但良好的編程風(fēng)格會(huì)顯著提升程序的可讀性。Python程序的書寫格式有嚴(yán)格的要求,不按照格式書寫有可能導(dǎo)致程序不能正確運(yùn)行,例如,代碼縮進(jìn)必須按照代碼塊層次(級(jí)別)要求。
Python使用縮進(jìn)來(lái)區(qū)分代碼塊的級(jí)別。Python中沒(méi)有采用花括號(hào)或begin-end等來(lái)分隔代碼塊,而是使用冒號(hào)和代碼縮進(jìn)區(qū)分代碼塊的級(jí)別。代碼縮進(jìn)是Python重要的語(yǔ)法規(guī)則,錯(cuò)誤的縮進(jìn)可能導(dǎo)致代碼的含義完全不同。例如:1縮進(jìn)2.1.2程序的書寫格式與基本規(guī)則執(zhí)行結(jié)果沒(méi)有任何輸出。因?yàn)閜rint(x)位于if代碼塊內(nèi),和x=x+1是同一個(gè)級(jí)別的,所以都沒(méi)有被執(zhí)行。而下面這段的代碼,最后一行的縮進(jìn)不同:執(zhí)行結(jié)果會(huì)輸出0。因?yàn)閜rint(x)位于if代碼塊外,和if語(yǔ)句是一個(gè)級(jí)別的,會(huì)被執(zhí)行。建議在代碼前輸入4個(gè)半角空格來(lái)表示代碼縮進(jìn),不推薦其他數(shù)量的空格或使用Tab鍵。部分Python編輯器(如IDLE、VSCode、PyScripter、PyCharm等)能根據(jù)所輸入的代碼層次關(guān)系自動(dòng)縮進(jìn)代碼,提高編碼效率。2.1.2程序的書寫格式與基本規(guī)則
Python語(yǔ)言允許在行尾加分號(hào),或用分號(hào)將兩條語(yǔ)句放在同一行中。
但編程風(fēng)格規(guī)范既不建議加分號(hào),也不建議將多條語(yǔ)句放在同一行中。2分號(hào)2.1.2程序的書寫格式與基本規(guī)則對(duì)超長(zhǎng)語(yǔ)句,允許但不提倡使用反斜杠連接行,建議在需要的地方使用圓括號(hào)來(lái)實(shí)現(xiàn)行連接。例如:3長(zhǎng)語(yǔ)句行2.1.2程序的書寫格式與基本規(guī)則對(duì)超長(zhǎng)語(yǔ)句,允許但不提倡使用反斜杠連接行,建議在需要的地方使用圓括號(hào)來(lái)實(shí)現(xiàn)行連接。例如:2.1.2程序的書寫格式與基本規(guī)則
不建議使用不必要的圓括號(hào)。除非用于實(shí)現(xiàn)行連接,否則不要在返回語(yǔ)句或條件語(yǔ)句中使用圓括號(hào)。例如:4圓括號(hào)2.1.2程序的書寫格式與基本規(guī)則頂級(jí)定義之間空兩行。變量定義、類定義及函數(shù)定義之間,可以空兩行。類內(nèi)部的方法定義之間,類定義與第一個(gè)方法之間,建議空一行。函數(shù)或方法中,如果有必要,可以空一行。5空行2.1.2程序的書寫格式與基本規(guī)則
頂級(jí)定義之間空兩行。變量定義、類定義及函數(shù)定義之間,可以空兩行。
類內(nèi)部的方法定義之間,類定義與第一個(gè)方法之間,建議空一行。
函數(shù)或方法中,如果有必要,可以空一行。6空格2.1.2程序的書寫格式與基本規(guī)則不建議在逗號(hào)、分號(hào)、冒號(hào)前面加空格,但建議在它們后面加空格(除了行尾)。例如:2.1.2程序的書寫格式與基本規(guī)則不建議在逗號(hào)、分號(hào)、冒號(hào)前面加空格,但建議在它們后面加空格(除了行尾)。例如:參數(shù)列表、索引或切片的左括號(hào)前不要加空格。例如:2.1.2程序的書寫格式與基本規(guī)則當(dāng)?shù)忍?hào)用于指示關(guān)鍵字參數(shù)或默認(rèn)參數(shù)值時(shí),不建議在其兩邊加空格。例如::當(dāng)?shù)忍?hào)用于指示關(guān)鍵字參數(shù)或默認(rèn)參數(shù)值時(shí),不建議在其兩邊加空格。例如:2.1.2程序的書寫格式與基本規(guī)則不建議用空格來(lái)垂直對(duì)齊多行間的標(biāo)記,因?yàn)檫@會(huì)成為維護(hù)的負(fù)擔(dān)(適用于“:”“#”“=”等)。例如:注:本書中為方便閱讀,注釋一般采用對(duì)齊方式,實(shí)際中不建議這樣做。2.1.2程序的書寫格式與基本規(guī)則7注釋注釋通常以“#”開始直到行尾結(jié)束。注釋通常以“#”開始直到行尾結(jié)束。行內(nèi)注釋是指和語(yǔ)句在同一行中的注釋。行內(nèi)注釋應(yīng)該以“#”和單個(gè)空格開始,并且應(yīng)該至少用兩個(gè)空格和前面的語(yǔ)句分開。行內(nèi)注釋是指和語(yǔ)句在同一行中的注釋。行內(nèi)注釋應(yīng)該以“#”和單個(gè)空格開始,并且應(yīng)該至少用兩個(gè)空格和前面的語(yǔ)句分開。2.1.2程序的書寫格式與基本規(guī)則8文檔字符串文檔字符串是Python獨(dú)特的注釋方式。文檔字符串是包、模塊、類或函數(shù)中的第一條語(yǔ)句。文檔字符串可以通過(guò)對(duì)象的__doc__成員被自動(dòng)提取。在書寫文檔字符串時(shí),應(yīng)在其前、后均使用三重雙引號(hào)"""或三重單引號(hào)""。一個(gè)規(guī)范的文檔字符串應(yīng)該首先是一行概述,接著是一行空行,最后是文檔字符串剩下的部分,并且應(yīng)該與文檔字符串第一行的第一個(gè)引號(hào)對(duì)齊。2.1.2程序的書寫格式與基本規(guī)則2.1.2程序的書寫格式與基本規(guī)則文檔字符串可以通過(guò)__doc__成員查看,也可以出現(xiàn)在help()函數(shù)的結(jié)果里:2.1.2程序的書寫格式與基本規(guī)則2.1.2程序的書寫格式與基本規(guī)則02Python的基本數(shù)據(jù)類型PARTTWO2.2Python的基本數(shù)據(jù)類型其中組合數(shù)據(jù)類型(字符串、列表、元組、字典等)詳見(jiàn)第4章。本節(jié)主要介紹數(shù)值類型,并初步介紹組合數(shù)據(jù)類型中的字符串類型。Python的數(shù)據(jù)類型包括數(shù)值類型和組合數(shù)據(jù)類型。2.2.1數(shù)值類型Python有4種數(shù)值類型:整數(shù)(int)、浮點(diǎn)數(shù)(float)、布爾值(bool)、復(fù)數(shù)(complex)類型。使用內(nèi)置函數(shù)type(object)可以返回objcct的數(shù)據(jù)類型。內(nèi)置函數(shù)isinstance(obj,class)可以用來(lái)測(cè)試對(duì)象obj是否為指定類型class的實(shí)例。例如:也可以使用函數(shù)isinstance()來(lái)判斷某個(gè)對(duì)象是否屬于某個(gè)類型。例如:2.2.1數(shù)值類型1整數(shù)整數(shù)類型也稱整型或int型。整數(shù)是不帶小數(shù)部分的數(shù)字,如100、0和-273。和其他大多數(shù)編程語(yǔ)言不同,Python中整數(shù)沒(méi)有長(zhǎng)度限制,甚至可以書寫和計(jì)算有幾百位數(shù)字的大整數(shù)。例如:2.2.1數(shù)值類型Python中整數(shù)的書寫支持4種數(shù)制:十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制。十進(jìn)制數(shù)直接用默認(rèn)方式書寫,而后三種則需要特殊的前綴,分別是0b、0o和0x,其中的字母也可以用大寫字母。在十六進(jìn)制數(shù)中,使用A~F這6個(gè)字母來(lái)代表十進(jìn)制數(shù)10~15,也可以用小寫字母a~f。例如:2.2.1數(shù)值類型2浮點(diǎn)數(shù)浮點(diǎn)數(shù)類型也稱浮點(diǎn)型或float型。浮點(diǎn)數(shù)是帶小數(shù)的數(shù)字,如4.、.5和-2.7315e2。其中4.相當(dāng)于4.0,.5相當(dāng)于0.5,-2.7315e2是科學(xué)記數(shù)法,相當(dāng)于-2.7315×102,即-273.15?!案↑c(diǎn)”(floating-point)是相對(duì)于“定點(diǎn)”(fixed-point)而言的,即小數(shù)點(diǎn)不再固定于某個(gè)位置,而是可以浮動(dòng)的。在數(shù)據(jù)存儲(chǔ)長(zhǎng)度有限的情況下,采用浮點(diǎn)表示方法,在數(shù)值變動(dòng)范圍很大或者數(shù)值很接近0時(shí),仍能保證一定長(zhǎng)度的有效數(shù)字。與整數(shù)不同,浮點(diǎn)數(shù)存在上限和下限。計(jì)算結(jié)果超出其上限和下限的范圍會(huì)導(dǎo)致溢出錯(cuò)誤。例如:2.2.1數(shù)值類型注意,浮點(diǎn)數(shù)只能以十進(jìn)制數(shù)形式書寫。需要說(shuō)明的是,計(jì)算機(jī)不一定能夠精確表示程序中書寫或計(jì)算的實(shí)數(shù)。有兩個(gè)原因:因?yàn)榇鎯?chǔ)空間有限,計(jì)算機(jī)不能精確顯示無(wú)限小數(shù),會(huì)產(chǎn)生誤差。計(jì)算機(jī)內(nèi)部采用二進(jìn)制數(shù)表示,但是,不是所有的十進(jìn)制實(shí)數(shù)都可以用二進(jìn)制數(shù)精確表示。由于機(jī)內(nèi)表示浮點(diǎn)數(shù)的二進(jìn)制位數(shù)有限,計(jì)算結(jié)果最后多出的二進(jìn)制位會(huì)被截?cái)啵a(chǎn)生的精度誤差稱為截?cái)嗾`差。2.2.1數(shù)值類型3布爾值布爾值就是邏輯值,只有兩種:True和False,分別代表“真”和“假”。Python3x中將True和False定義為關(guān)鍵字,但實(shí)質(zhì)上它們的值仍是1和0,并且可以與數(shù)值類型的值進(jìn)行算術(shù)運(yùn)算。布爾值類型也稱布爾型或bool型所有非0數(shù)字或非空對(duì)象的值均為True。例如:2.2.1數(shù)值類型數(shù)字0和所有空對(duì)象,即"、[]、()、set()、{}和None等均為False。例如:下面兩條語(yǔ)句比較左右兩個(gè)值是否相等:2.2.1數(shù)值類型4復(fù)數(shù)復(fù)數(shù)類型也稱complex型,是Python內(nèi)置的數(shù)據(jù)類型,使用1j表示-1的平方根。復(fù)數(shù)對(duì)象有兩個(gè)屬性,用于查看其實(shí)部(real)和虛部(imag)。例如:2.2.1數(shù)值類型2.2.2字符串類型字符串(string)類型屬于序列型組合數(shù)據(jù)類型。字符串是由字符組成的序列,例如,'Pythoniswonderful!'、'16300240001'、'張三'和"等,其中,"表示空字符串。字符串和數(shù)字一樣,都是不可變對(duì)象。所謂不可變,是指不能原地修改對(duì)象的內(nèi)容。例如:1字符串界定符點(diǎn)雙引號(hào),如"","中國(guó)","It'smybook."。當(dāng)字符串中含有單引號(hào)時(shí),最好使用雙引號(hào)作為界定符。
單引號(hào),如",'1+1=2',Hesaid"howareyou?"'。當(dāng)字符串中含有雙引號(hào)時(shí),最好使用單引號(hào)作為界定符。
三引號(hào),可以是連續(xù)三個(gè)單引號(hào),也可以是連續(xù)三個(gè)雙引號(hào),如"'Hello"',"""您好"""。其常用于多行字符串,例如,之前介紹的文檔字符串。編程時(shí)三引號(hào)也可用于注釋多行語(yǔ)句。字符串界定符用來(lái)區(qū)分字符串和其他詞法單位,有以下三種形式。1232.2.2字符串類型2轉(zhuǎn)義符和原始字符串轉(zhuǎn)義符是一些特殊的字符。Python用反斜杠(\)來(lái)轉(zhuǎn)義字符,以便表示那些特殊字符,見(jiàn)表2-1。2.2.2字符串類型字符串(string)類型屬于序列型組合數(shù)據(jù)類型。字符串是由字符組成的序列,例如,'Pythoniswonderful!'、'16300240001'、'張三'和"等,其中,"表示空字符串。字符串和數(shù)字一樣,都是不可變對(duì)象。所謂不可變,是指不能原地修改對(duì)象的內(nèi)容。例如:2.2.2字符串類型以下是使用轉(zhuǎn)義符的幾個(gè)例子:若需要顯示包含轉(zhuǎn)義符的原始字符串,不讓轉(zhuǎn)義符生效,這就要用r或R來(lái)定義原始字符串。例如:在上例中,如果不使用原始字符串,就得多次使用轉(zhuǎn)義符W:2.2.2字符串類型3對(duì)字符串中字符的操作字符串中的字符是不能用賦值操作進(jìn)行改變的。Python中內(nèi)置了一些對(duì)字符串中字符進(jìn)行操作的方法,見(jiàn)表2-2。2.2.2字符串類型值得注意的是,執(zhí)行表2-2中的操作后,原字符串s并不發(fā)生變化。例如:2.2.2字符串類型4對(duì)字符串中字符的操作使用len()函數(shù)可以確定字符串中包含多少個(gè)字符,即字符串的長(zhǎng)度。例如:2.2.2字符串類型5字符串連接
利用加法運(yùn)算符“+”可以讓兩個(gè)字符串首尾相連。例如:從第2條語(yǔ)句的輸出可以看出,IDLE的輸出自動(dòng)加了一個(gè)“\”,以免引起歧義。第3條語(yǔ)句的輸出說(shuō)明,“\”實(shí)際并不包含在連接結(jié)果里。用字符串對(duì)象的ajoin(b)方法可將字符串b中的字符用指定字符串a(chǎn)連接起來(lái)(在b的每個(gè)字符間插入a)。例如:2.2.2字符串類型6字符串重復(fù)利用乘法運(yùn)算符“*”可以讓一個(gè)字符串自身多次重復(fù)并拼接在一起。例如:2.2.2字符串類型7字符大小寫轉(zhuǎn)換利用乘法運(yùn)算符“*”可以讓一個(gè)字符串自身多次重復(fù)并拼接在一起。例如:2.2.2字符串類型03Python的基本運(yùn)算和表達(dá)式PARTTHREE2.3.1變量的操作1變量的賦值和存儲(chǔ)變量定義是通過(guò)對(duì)變量的第一次賦值來(lái)實(shí)現(xiàn)的,在Python中不需要變量定義語(yǔ)句。(1)變量定義變量必須定義之后才能訪問(wèn)。Python中的變量比較靈活,同一個(gè)變量名稱可以先后被賦予不同類型的值,定義為不同的變量對(duì)象參與計(jì)算。在上面的例子中,x一開始是整型變量,之后又變成了浮點(diǎn)型變量。2.3.1變量的操作(2)變量刪除使用del命令可以刪除一個(gè)對(duì)象(包括變量、函數(shù)等),刪除之后就不能再訪問(wèn)這個(gè)對(duì)象了,因?yàn)樗呀?jīng)不存在了。當(dāng)然,也可以通過(guò)再次賦值重新定義該變量。變量是否存在取決于變量是否占據(jù)一定的內(nèi)存空間。當(dāng)定義變量時(shí),操作系統(tǒng)將內(nèi)存空間分配給變量,該變量就存在了。當(dāng)使用del命令刪除變量后,操作系統(tǒng)釋放了變量的內(nèi)存空間,該變量也就不存在了。2.3.1變量的操作Python具有垃圾回收機(jī)制,當(dāng)一個(gè)對(duì)象的內(nèi)存空間不再使用(引用計(jì)數(shù)為0)后,這個(gè)內(nèi)存空間就會(huì)被自動(dòng)釋放。所以Python不會(huì)像C語(yǔ)言那樣發(fā)生內(nèi)存泄漏,進(jìn)而導(dǎo)致內(nèi)存空間不足,甚至系統(tǒng)死機(jī)。Python的垃圾空間回收是由操作系統(tǒng)自動(dòng)完成的,而del命令相當(dāng)于程序主動(dòng)地進(jìn)行空間釋放,將其歸還給操作系統(tǒng)。Python中的變量實(shí)質(zhì)是引用,其邏輯如圖2-1所示。(3)變量引用2.3.1變量的操作(4)變量修改賦值Python中的變量可以通過(guò)賦值來(lái)修改變量的“值”,但并不是原地址修改。例如,變量x先被賦值為1,然后又被賦值為1.5,其邏輯如圖2-2所示。2.3.1變量的操作由圖2-2可見(jiàn),并不是變量x的值由1變成了1.5,而是另外開辟了一個(gè)地址空間存儲(chǔ)1.5,并讓x指向它。變量的值并不是直接存儲(chǔ)在變量里,而是以“值”對(duì)象的形式存儲(chǔ)在內(nèi)存某地址中。我們可以說(shuō),變量指向那個(gè)“值”對(duì)象。因此,Python變量里存放的實(shí)際是“值”對(duì)象的位置信息(內(nèi)存地址)。這種通過(guò)地址間接訪問(wèn)對(duì)象數(shù)據(jù)的方式,稱為引用。2.3.1變量的操作使用id()函數(shù)可以確切地知道變量引用的內(nèi)存地址,使用運(yùn)算符is可以判斷兩個(gè)變量是否引用同一個(gè)對(duì)象。例如:2.3.1變量的操作顯然,x和y都被賦值為相同的小整數(shù)或者短字符串時(shí),兩個(gè)變量所引用的是同一個(gè)對(duì)象,這也被稱為“駐留機(jī)制”。這是Python為提高效率所做的優(yōu)化,節(jié)省了頻繁創(chuàng)建和銷毀對(duì)象的時(shí)間,也節(jié)省了存儲(chǔ)空間。但是,當(dāng)兩個(gè)變量賦值為相同的大整數(shù)或者長(zhǎng)字符串時(shí),默認(rèn)引用的是兩個(gè)不同的對(duì)象。例如:2.3.1變量的操作我們可以利用變量之間的賦值,來(lái)讓兩個(gè)變量引用相同的對(duì)象。例如:2.3.1變量的操作2變量類型的轉(zhuǎn)換Python是動(dòng)態(tài)強(qiáng)類型語(yǔ)言。雖然書寫表達(dá)式時(shí)無(wú)須為對(duì)象聲明類型,但當(dāng)一個(gè)變量對(duì)象被賦值時(shí),這個(gè)對(duì)象的類型就固定了,不能隱式轉(zhuǎn)換成另一種類型。當(dāng)運(yùn)算需要時(shí),必須進(jìn)行顯式的變量類型轉(zhuǎn)換。例如,input()函數(shù)所獲得的輸入值總是字符串,但有時(shí)需要將其轉(zhuǎn)換為數(shù)值類型,方能進(jìn)行算術(shù)運(yùn)算。對(duì)于較為復(fù)雜的表達(dá)式,如果難以確定變量類型,可以用type()函數(shù)進(jìn)行測(cè)試。例如:2.3.1變量的操作變量的類型轉(zhuǎn)換并不是對(duì)變量原地進(jìn)行修改,而是產(chǎn)生一個(gè)新的預(yù)期類型的對(duì)象。通常轉(zhuǎn)換目標(biāo)類型的名稱就是類型轉(zhuǎn)換的內(nèi)置函數(shù)名稱。將其他類型數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)數(shù)。例如:(1)float()函數(shù)2.3.1變量的操作將其他類型數(shù)據(jù)轉(zhuǎn)換為字符串。例如:(2)str()函數(shù)從上述最后兩個(gè)例子我們可以看出,Python會(huì)盡可能轉(zhuǎn)換成字符串長(zhǎng)度較短的形式,以節(jié)省空間。2.3.1變量的操作將其他類型數(shù)據(jù)轉(zhuǎn)換為整數(shù)。例如:(3)int()函數(shù)2.3.1變量的操作將浮點(diǎn)數(shù)圓整為整數(shù)。例如:(4)round()函數(shù)圓整計(jì)算總是“四舍”,但并不一定總是“五入”。因?yàn)榭偸欠晡逑蛏蠄A整會(huì)帶來(lái)計(jì)算概率的偏差,所以,Python采用的是“銀行家圓整”:將小數(shù)部分為.5的數(shù)字圓整為最接近的偶數(shù),即“四舍六入五留雙”。2.3.1變量的操作將其他類型數(shù)據(jù)轉(zhuǎn)換為布爾值。例如:(5)bool()函數(shù)可見(jiàn),數(shù)值0和空字符串被轉(zhuǎn)換為布爾值False,非0值和非空字符串被轉(zhuǎn)換為布爾值True。2.3.1變量的操作進(jìn)行整數(shù)和字符之間的相互轉(zhuǎn)換:chr()將整數(shù)按ASCII碼轉(zhuǎn)換為對(duì)應(yīng)的字符;ord()是chr()的逆運(yùn)算,將字符轉(zhuǎn)換為對(duì)應(yīng)的ASCⅡ碼或Unicode值。例如:(6)chr()和ord()函數(shù)將字符串類型的算術(shù)表達(dá)式轉(zhuǎn)換為其執(zhí)行結(jié)果,返回表達(dá)式的值。例如:(7)eval()函數(shù)2.3.1變量的操作2.3.2
運(yùn)算符Python支持算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等基本運(yùn)算符。按照運(yùn)算所需要的操作數(shù)數(shù)目,可以分為單目、雙目、三目運(yùn)算符。單目運(yùn)算符只需要一個(gè)操作數(shù)。例如,單目減(-)、邏輯非(not)。雙目運(yùn)算符需要兩個(gè)操作數(shù)。Python中的大多數(shù)運(yùn)算符是雙目運(yùn)算符。三目運(yùn)算符需要三個(gè)操作數(shù)。條件運(yùn)算是三目運(yùn)算符,例如,bifaelsec。運(yùn)算符具有不同的優(yōu)先級(jí)。我們熟知的“先乘除后加減”就是優(yōu)先級(jí)的體現(xiàn)。只不過(guò),Python運(yùn)算符種類很多,優(yōu)先級(jí)也分成了高低不同的很多層次。當(dāng)一個(gè)表達(dá)式中有多個(gè)運(yùn)算符時(shí),將按優(yōu)先級(jí)從高到低依次運(yùn)算。運(yùn)算符還具有不同的結(jié)合性:左結(jié)合或右結(jié)合。當(dāng)一個(gè)表達(dá)式中有多個(gè)運(yùn)算符,且優(yōu)先級(jí)都相同時(shí),將根據(jù)結(jié)合性來(lái)判斷運(yùn)算的先后順序。左結(jié)合就是自左至右依次運(yùn)算。Python運(yùn)算符大多是左結(jié)合的。右結(jié)合就是自右至左依次運(yùn)算。所有的單目運(yùn)算符和圓括號(hào)()都是右結(jié)合的。實(shí)際上,圓括號(hào)是自右向左依次運(yùn)算的,即內(nèi)層的圓括號(hào)更優(yōu)先,從內(nèi)向外運(yùn)算。以上所說(shuō)的通過(guò)優(yōu)先級(jí)、結(jié)合性來(lái)決定運(yùn)算順序,只在沒(méi)有圓括號(hào)的情況下成立。使用圓括號(hào)可以改變運(yùn)算符的運(yùn)算順序。2.3.1變量的操作2.3.3算術(shù)運(yùn)算Python的算術(shù)運(yùn)算符見(jiàn)表2-3。算術(shù)運(yùn)算符的優(yōu)先級(jí),按照從低到高的順序(同一行的優(yōu)先級(jí)相同)排列如下:再看幾個(gè)例子:2.3.3算術(shù)運(yùn)算以上的例子都是相同類型數(shù)據(jù)之間的運(yùn)算。如果是不同類型數(shù)據(jù)之間的運(yùn)算,會(huì)發(fā)生隱式類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則是:低類型向高類型轉(zhuǎn)換??梢赃M(jìn)行算術(shù)運(yùn)算的各種數(shù)據(jù)類型,從低到高排列為:bool型<int型<float型<complex型。例如:2.3.3算術(shù)運(yùn)算常用的Python數(shù)學(xué)運(yùn)算類的內(nèi)置函數(shù)見(jiàn)表2-4。2.3.3算術(shù)運(yùn)算math模塊中的函數(shù)見(jiàn)表2-5。2.3.3算術(shù)運(yùn)算math模塊中還包含了兩個(gè)數(shù)學(xué)運(yùn)算中的常量。math.pi:數(shù)學(xué)常量π,math.pi=3.141592653589793。math.e:數(shù)學(xué)常量e,math.e=2.718281828459045。使用math模塊前要先導(dǎo)入,使用函數(shù)時(shí)要在函數(shù)名前面加上“math.”。例如:2.3.3算術(shù)運(yùn)算如果要頻繁使用某單一模塊中的函數(shù),為避免每次寫模塊名的麻煩,也可以按下面的方式導(dǎo)入:這樣,就可以像內(nèi)置函數(shù)那樣來(lái)使用模塊函數(shù)了。但是多個(gè)模塊中可能有同名函數(shù),如果都按這種方式導(dǎo)入,則會(huì)產(chǎn)生名字沖突的問(wèn)題。2.3.3算術(shù)運(yùn)算2.3.4輸入與輸出語(yǔ)句Python程序一般并不會(huì)被編譯成二進(jìn)制可執(zhí)行程序脫離Python環(huán)境獨(dú)立運(yùn)行,而是以解釋方式運(yùn)行。通常Python程序以純文本形式保存為帶.py擴(kuò)展名的程序文件,每次運(yùn)行程序時(shí)都需要由Python解釋器對(duì)程序文件進(jìn)行解釋并執(zhí)行。計(jì)算機(jī)程序通常通過(guò)輸入語(yǔ)句、輸出語(yǔ)句作為程序的入口和出口。1輸入語(yǔ)句輸入語(yǔ)句用于在程序運(yùn)行時(shí)從輸入設(shè)備獲得數(shù)據(jù)。標(biāo)準(zhǔn)輸入設(shè)備就是鍵盤。通過(guò)input()函數(shù)可以獲取鍵盤輸入數(shù)據(jù)。一般格式如下:input()函數(shù)首先輸出提示字符串,然后等待用戶鍵盤輸入,直到用戶按回車鍵結(jié)束,函數(shù)最后返回用戶輸入的字符串(不包括最后的回車符),系統(tǒng)繼續(xù)執(zhí)行input()函數(shù)后面的語(yǔ)句。例如:2.3.4輸入與輸出語(yǔ)句系統(tǒng)會(huì)彈出字符串“請(qǐng)輸入您的專業(yè):”,等待用戶輸入,用戶輸入內(nèi)容并按回車鍵后,相應(yīng)的輸入內(nèi)容將被保存到變量name中。如果需要將輸入的字符串轉(zhuǎn)換為其他類型(如整型、浮點(diǎn)型等),調(diào)用對(duì)應(yīng)的轉(zhuǎn)換函數(shù)即可。2.3.4輸入與輸出語(yǔ)句2輸出語(yǔ)句輸出語(yǔ)句用于將程序的運(yùn)行結(jié)果顯示在輸出設(shè)備上,供用戶查看。標(biāo)準(zhǔn)輸出設(shè)備就是顯示器屏幕。一般格式如下:通過(guò)print()函數(shù)可以將多個(gè)輸出值轉(zhuǎn)換為字符串并且輸出,這些值之間以sep分隔,最后以end結(jié)束。sep默認(rèn)值為空格符,end默認(rèn)值為換行符。2.3.4輸入與輸出語(yǔ)句【例2-4】輸出語(yǔ)句示例。上述兩行輸出是兩個(gè)print()函數(shù)執(zhí)行的結(jié)果。本例代碼第3條語(yǔ)句中的x并沒(méi)有任何輸出。這說(shuō)明,只有在命令提示符>>>后面檢查某個(gè)變量或表達(dá)式的值時(shí),才能看到輸出顯示。而如果在.py程序運(yùn)行的模式下,必須使用print()函數(shù)才會(huì)有輸出顯示。2.3.4輸入與輸出語(yǔ)句第1行輸出結(jié)果'abc123',是由本例代碼第1條語(yǔ)句print(abc',123)輸出的。可以看出,兩個(gè)輸出項(xiàng)之間自動(dòng)添加了空格,這是因?yàn)閜rint()函數(shù)的參數(shù)sep默認(rèn)值為空格符。如果希望輸出項(xiàng)之間是逗號(hào),則可以把本例代碼第1條語(yǔ)句改為:2.3.4輸入與輸出語(yǔ)句本例代碼第4條語(yǔ)句print(x)的輸出結(jié)果是另起一行輸出1.5。這是因?yàn)閜rint()函數(shù)的參數(shù)end默認(rèn)值為換行符('n'),所以在第1行輸出之后自動(dòng)添加了一個(gè)換行符。如果不需要換行,可以將下一個(gè)print()函數(shù)的輸出字符串直接連在其后,也可使用end-"。如果希望不換行而是加一個(gè)逗號(hào),則可以把第1條語(yǔ)句改為:修改程序后的輸出結(jié)果如下:2.3.4輸入與輸出語(yǔ)句2.3.5賦值、關(guān)系和邏輯運(yùn)算1賦值運(yùn)算符賦值運(yùn)算符用“=”表示,一般形式如下:其左邊只能是變量,而不能是常量或表達(dá)式。例如,5=x或5=2+3都是錯(cuò)誤的。注意,Python中的賦值運(yùn)算是沒(méi)有返回值的。也就是說(shuō),賦值操作不顯示運(yùn)算結(jié)果,只有效果——變量的值被改變了。例如:注意,程序中的y=x不是數(shù)學(xué)中的等式,不代表y恒等于x,不符合數(shù)學(xué)的交換律。賦值只是一個(gè)瞬間動(dòng)作。除基本賦值外,賦值還包括序列賦值、多目標(biāo)賦值和復(fù)合賦值等(詳見(jiàn)2.3.7節(jié))。2.3.5賦值、關(guān)系和邏輯運(yùn)算2關(guān)系運(yùn)算符關(guān)系運(yùn)算符也稱為比較運(yùn)算符,可以對(duì)數(shù)值類型或字符串類型的數(shù)據(jù)進(jìn)行大小比較,返回一個(gè)布爾值(True或False),見(jiàn)表2-6。所有關(guān)系運(yùn)算符的優(yōu)先級(jí)相同。2.3.5賦值、關(guān)系和邏輯運(yùn)算特別要注意的是,關(guān)系運(yùn)算符中“等于”使用的是雙等號(hào)“=-”,而不是“=”,這是初學(xué)者常犯的錯(cuò)誤。在比較過(guò)程中,應(yīng)遵循以下規(guī)則。①若兩個(gè)操作數(shù)是數(shù)值類型的,則按大小進(jìn)行比較。2.3.5賦值、關(guān)系和邏輯運(yùn)算②若兩個(gè)操作數(shù)是字符串類型的,則按“字典順序”進(jìn)行比較:首先取兩個(gè)字符串的第1個(gè)字符進(jìn)行比較,較大的字符所在的字符串更大;如果相同,則再取兩個(gè)字符串的第2個(gè)字符進(jìn)行比較,其余類推。結(jié)果有三種情況:第一種,某次比較分出勝負(fù),較大的字符所在字符串更大;第二種,始終不分勝負(fù),并且兩個(gè)字符串同時(shí)取完所有字符,那么這兩個(gè)字符串相等;第三種,在分出勝負(fù)前,一個(gè)字符串已經(jīng)取完所有字符,那么這個(gè)較短的字符串較小。第三種情況也可以認(rèn)為是空字符和其他字符的比較,空字符總是最小的。2.3.5賦值、關(guān)系和邏輯運(yùn)算常用字符的大小關(guān)系為:空字符<空格符<0~9'<'A'~Z<'a'~z'<漢字。比較浮點(diǎn)數(shù)是否相等時(shí)要注意的是,因?yàn)橛芯日`差,可能產(chǎn)生本應(yīng)相等但比較結(jié)果卻不相等的情況。例如:我們可以用兩個(gè)浮點(diǎn)數(shù)的差距小于一個(gè)極小值來(lái)判定是否“應(yīng)該相等”,這個(gè)“極小值”可以根據(jù)需要自行指定。例如:2.3.5賦值、關(guān)系和邏輯運(yùn)算3邏輯運(yùn)算符邏輯運(yùn)算符的優(yōu)先級(jí)按照從低到高的順序排列為:or<and<not。2.3.5賦值、關(guān)系和邏輯運(yùn)算復(fù)數(shù)不能比較大小,只能比較是否相等。Python允許x<y<z這樣的鏈?zhǔn)奖容^,它相當(dāng)于x<yandy<z。甚至可以用x<y>z(此式并非鏈?zhǔn)奖容^,但允許),相當(dāng)于x<yandy>z。例如:2.3.5賦值、關(guān)系和邏輯運(yùn)算or是一個(gè)短路運(yùn)算符,如果左操作數(shù)為True,則跳過(guò)右操作數(shù)的計(jì)算,直接得出結(jié)果為True。只有在左操作數(shù)為False時(shí),才會(huì)計(jì)算右操作數(shù)的值。and也是一個(gè)短路運(yùn)算符,如果左操作數(shù)為False,則跳過(guò)右操作數(shù)的計(jì)算,直接得出結(jié)果為False。只有在左操作數(shù)為True時(shí),才會(huì)計(jì)算右操作數(shù)的值。短路運(yùn)算可以節(jié)省不必要的計(jì)算時(shí)間,而且Python會(huì)按照“最貪婪”的方式進(jìn)行短路,以至于看上去跨越了優(yōu)先級(jí)次序。例如:2.3.5賦值、關(guān)系和邏輯運(yùn)算在這個(gè)例子中,b==2andc==3全部被短路了,并不會(huì)因?yàn)閮?yōu)先級(jí)高而先計(jì)算and。證明方法是,把上面的例子改寫成下面的形式:equal()函數(shù)并沒(méi)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023-2024年一級(jí)人力資源管理師考試題庫(kù)(帶答案解析)
- 2024年現(xiàn)代農(nóng)業(yè)大棚示范園購(gòu)銷合同3篇
- 2024年跨國(guó)企業(yè)營(yíng)銷與市場(chǎng)代運(yùn)營(yíng)合同
- 2024年銷售團(tuán)隊(duì)業(yè)績(jī)承諾及客戶關(guān)系維護(hù)合同3篇
- 2024年版設(shè)計(jì)服務(wù)協(xié)議提前終止協(xié)議版
- 2024版場(chǎng)地外包合同范本
- 勞動(dòng)人事管理簽訂合同范本
- 二零二五年地磚施工環(huán)保認(rèn)證與質(zhì)量保障合同3篇
- 2024年稅收優(yōu)惠政策框架3篇
- 2024年鋼材訂購(gòu)協(xié)議
- 勞務(wù)派遣服務(wù)外包技術(shù)方案
- 采購(gòu)管理實(shí)務(wù)全套教學(xué)課件
- 極致物業(yè)管理系統(tǒng)收費(fèi)管理業(yè)務(wù)操作
- GB∕T 29639-2020 生產(chǎn)經(jīng)營(yíng)單位生產(chǎn)安全事故應(yīng)急預(yù)案編制導(dǎo)則
- 貴州省工傷保險(xiǎn)待遇申領(lǐng)授權(quán)委托書
- 媒介融合(ppt)課件
- 酒店項(xiàng)目投資分析報(bào)告可行性報(bào)告
- 液壓系統(tǒng)中油管尺寸的選擇
- 視頻監(jiān)控臺(tái)賬參考模板
- 初一初三國(guó)家體育鍛煉標(biāo)準(zhǔn)評(píng)分表
- F1方程式賽車的空氣動(dòng)力學(xué)
評(píng)論
0/150
提交評(píng)論