第1章 基礎(chǔ)知識(shí)_第1頁
第1章 基礎(chǔ)知識(shí)_第2頁
第1章 基礎(chǔ)知識(shí)_第3頁
第1章 基礎(chǔ)知識(shí)_第4頁
第1章 基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.0Python是一種怎樣的語言Python是一門跨平臺(tái)、開源、免費(fèi)的解釋型高級(jí)動(dòng)態(tài)編程語言,支持偽編譯將Python源程序轉(zhuǎn)換為字節(jié)碼來優(yōu)化程序和提高運(yùn)行速度,支持使用py2exe、pyinstaller或cx_Freeze工具將Python程序轉(zhuǎn)換為二進(jìn)制可執(zhí)行文件。Python支持命令式編程(Howtodo)、函數(shù)式編程(Whattodo),完全支持面向?qū)ο蟪绦蛟O(shè)計(jì),語法簡(jiǎn)潔清晰,擁有大量的幾乎支持所有領(lǐng)域應(yīng)用開發(fā)的成熟擴(kuò)展庫(kù)。1.0Python是一種怎樣的語言問題解決:把列表中的所有數(shù)字都加5,得到新列表。(命令式編程)>>>x=list(range(10))>>>x[0,1,2,3,4,5,6,7,8,9]>>>y=[]>>>fornuminx:y.append(num+5)

>>>y[5,6,7,8,9,10,11,12,13,14]>>>[num+5fornuminx][5,6,7,8,9,10,11,12,13,14]循環(huán),遍歷x中的每個(gè)元素列表方法,在尾部追加元素列表推導(dǎo)式創(chuàng)建列表空列表1.0Python是一種怎樣的語言問題解決:把列表中的所有數(shù)字都加5,得到新列表。(函數(shù)式編程)>>>x=list(range(10))>>>x[0,1,2,3,4,5,6,7,8,9]>>>defadd5(num):returnnum+5>>>list(map(add5,x))[5,6,7,8,9,10,11,12,13,14]>>>list(map(lambdanum:num+5,x))[5,6,7,8,9,10,11,12,13,14]自定義函數(shù),接收一個(gè)數(shù)字,加5后返回把函數(shù)add5映射到x中的每個(gè)元素lambda表達(dá)式,等價(jià)于函數(shù)add51.1如何選擇Python版本啟動(dòng)“IDLE(PythonGUI)”即可可以看到當(dāng)前安裝的Python版本號(hào)。1.1如何選擇Python版本多版本共存時(shí)注意事項(xiàng):系統(tǒng)環(huán)境變量path1.2Python安裝與簡(jiǎn)單使用幾個(gè)重要網(wǎng)址//doc///python/questions/tagged/python1.2Python安裝與簡(jiǎn)單使用默認(rèn)編程環(huán)境:IDLE其他常用開發(fā)環(huán)境:Eclipse+PyDevPyCharmwingIDEEricPythonWinAnaconda3:JupyterNotebook、SpyderzwPythonVSCode1.2Python安裝與簡(jiǎn)單使用在IDLE中,如果使用交互式編程模式,那么直接在提示符“>>>”后面輸入相應(yīng)的命令并回車執(zhí)行即可,如果執(zhí)行順利的話,馬上就可以看到執(zhí)行結(jié)果,否則會(huì)拋出異常。>>>3+58>>>importmath>>>math.sqrt(9)3.0>>>3*(2+6)24>>>2/0Traceback(mostrecentcalllast):File"<pyshell#18>",line1,in<module>2/0ZeroDivisionError:integerdivisionormodulobyzero交互模式下每次只能執(zhí)行一條語句直到再次出現(xiàn)提示符才能輸入下一條語句代碼出錯(cuò),拋出異常提示符,不用輸入1.2Python安裝與簡(jiǎn)單使用>>>foriinrange(5):print(i)

01234交互模式下,復(fù)合語句需要按兩次回車1.2Python安裝與簡(jiǎn)單使用在IDLE界面中使用菜單“File”==>“NewFile”創(chuàng)建一個(gè)程序文件,輸入代碼并保存為.py或.pyw文件。使用菜單“Run”==>“CheckModule”來檢查程序中是否存在語法錯(cuò)誤,或者使用菜單“Run”==>“RunModule”運(yùn)行程序,程序運(yùn)行結(jié)果將直接顯示在IDLE交互界面上。1.2Python安裝與簡(jiǎn)單使用1.2Python安裝與簡(jiǎn)單使用在有些情況下可能需要在命令提示符環(huán)境中運(yùn)行Python程序文件。在“開始”菜單的“附件”中單擊“命令提示符”,然后執(zhí)行Python程序。假設(shè)有程序HelloWorld.py內(nèi)容如下。defmain():print('Helloworld')main()這里的空行建議保留1.2Python安裝與簡(jiǎn)單使用在IDLE環(huán)境下,除了撤銷(Ctrl+Z)、全選(Ctrl+A)、復(fù)制(Ctrl+C)、粘貼(Ctrl+V)、剪切(Ctrl+X)等常規(guī)快捷鍵之外,其他比較常用的快捷鍵如下表所示??旖萱I功能說明Alt+p瀏覽歷史命令(上一條)Alt+n瀏覽歷史命令(下一條)Ctrl+F6重啟Shell,之前定義的對(duì)象和導(dǎo)入的模塊全部失效F1打開Python幫助文檔Alt+/自動(dòng)補(bǔ)全前面曾經(jīng)出現(xiàn)過的單詞,如果之前有多個(gè)單詞具有相同前綴,則在多個(gè)單詞中循環(huán)選擇Ctrl+]縮進(jìn)代碼塊Ctrl+[取消代碼塊縮進(jìn)Alt+3注釋代碼塊Alt+4取消代碼塊注釋。Tab補(bǔ)全單詞,選中多行時(shí)可用于縮進(jìn)1.3使用pip管理第三方包pip工具常用命令pip命令示例說明pipdownloadSomePackage[==version]下載擴(kuò)展庫(kù)的指定版本,不安裝pipfreeze[>requirements.txt]以requirements的格式列出已安裝模塊piplist列出當(dāng)前已安裝的所有模塊pipinstallSomePackage[==version]在線安裝SomePackage模塊的指定版本pipinstallSomePackage.whl通過whl文件離線安裝擴(kuò)展庫(kù)pipinstallpackage1package2...依次(在線)安裝package1、package2等擴(kuò)展模塊pipinstall-rrequirements.txt安裝requirements.txt文件中指定的擴(kuò)展庫(kù)pipinstall--upgradeSomePackage升級(jí)SomePackage模塊pipuninstallSomePackage[==version]卸載SomePackage模塊的指定版本可以在資源管理器中切換至相應(yīng)的文件夾并直接進(jìn)入命令提示符環(huán)境。Shift+鼠標(biāo)右鍵1.3使用pip管理第三方包1.3使用pip管理第三方包在Windows平臺(tái)上,如果在線安裝擴(kuò)展庫(kù)失敗,可以從/~gohlke/pythonlibs/下載擴(kuò)展庫(kù)編譯好的.whl文件(注意版本,并且一定不要修改下載的文件名),然后在命令提示符環(huán)境中使用pip命令進(jìn)行離線安裝。例如:pipinstallDjango-2.1.3-py3-none-any.whl1.3使用pip管理第三方包如果由于網(wǎng)速問題導(dǎo)致在線安裝速度過慢的話,pip命令還支持指定國(guó)內(nèi)的站點(diǎn)來提高速度,下面的命令用來從阿里云下載安裝擴(kuò)展庫(kù)jieba,其他服務(wù)器地址可以自行查閱。pipinstalljieba-i/pypi/simple--trusted-host1.3使用pip管理第三方包如果遇到類似于“拒絕訪問”的出錯(cuò)信息,需要在執(zhí)行pip命令時(shí)增加選項(xiàng)--user,例如pipinstalljieba--user1.4.1Python的對(duì)象模型對(duì)象是python語言中最基本的概念,在python中處理的一切都是對(duì)象。python中有許多內(nèi)置對(duì)象可供編程者使用,內(nèi)置對(duì)象可直接使用,如數(shù)字、字符串、列表、del等;非內(nèi)置對(duì)象需要導(dǎo)入模塊才能使用,如正弦函數(shù)sin(x),隨機(jī)數(shù)產(chǎn)生函數(shù)random()等。1.4.1Python的對(duì)象模型對(duì)象類型類型名稱示例簡(jiǎn)要說明數(shù)字int,float,complex1234,3.14,1.3e5,3+4j數(shù)字大小沒有限制,內(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)分隔,其中的元素可以是任意類型字典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是不可變的常用內(nèi)置對(duì)象對(duì)象類型類型名稱示例簡(jiǎn)要說明布爾型boolTrueFalse邏輯值,關(guān)系運(yùn)算符、成員測(cè)試運(yùn)算符、同一性測(cè)試運(yùn)算符組成的表達(dá)式的值一般為True或False空類型NoneTypeNone空值異常Exception、ValueError、TypeError

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

f=

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

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

函數(shù)(使用def定義)類(使用class定義)模塊(類型為module)類和函數(shù)都屬于可調(diào)用對(duì)象,模塊用來集中存放函數(shù)、類、常量或其他對(duì)象續(xù)表1.4.1Python的對(duì)象模型在Python中,不需要事先聲明變量名及其類型,直接賦值即可創(chuàng)建各種類型的對(duì)象變量。這一點(diǎn)適用于Python任意類型的對(duì)象。例如語句>>>x=3創(chuàng)建了整型變量x,并賦值為3,再例如語句>>>x='Helloworld.'創(chuàng)建了字符串變量x,并賦值為'Helloworld.'。1.4.2Python變量憑空出現(xiàn)一個(gè)整型變量x新的字符串變量,再也不是原來的x了1.4.2Python變量Python屬于強(qiáng)類型編程語言,Python解釋器會(huì)根據(jù)賦值或運(yùn)算來自動(dòng)推斷變量類型。Python還是一種動(dòng)態(tài)類型語言,變量的類型也是可以隨時(shí)變化的。>>>x=3>>>print(type(x))<class'int'>>>>x='Helloworld.'>>>print(type(x))#查看變量類型<class'str'>>>>x=[1,2,3]>>>print(type(x))<class'list'>1.4.2Python變量如果變量出現(xiàn)在賦值運(yùn)算符或復(fù)合賦值運(yùn)算符(例如+=、*=等等)的左邊則表示創(chuàng)建變量或修改變量的值,否則表示引用該變量的值。>>>x=3#創(chuàng)建整型變量>>>print(x**2)9>>>x+=6#修改變量值>>>print(x)#讀取變量值并輸出顯示9>>>x=[1,2,3]#創(chuàng)建列表對(duì)象>>>x[1]=5#修改列表元素值>>>print(x)#輸出顯示整個(gè)列表[1,5,3]>>>print(x[2])#輸出顯示列表指定元素31.4.2Python變量字符串和元組屬于不可變序列,不能通過下標(biāo)的方式來修改其中的元素值,試圖修改元組中元素的值時(shí)會(huì)拋出異常。>>>x=(1,2,3)>>>print(x)(1,2,3)>>>x[1]=5Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>x[1]=5TypeError:'tuple'objectdoesnotsupportitemassignment1.4.2Python變量在Python中,允許多個(gè)變量指向同一個(gè)值,例如:>>>x=3>>>id(x)1786684560>>>y=x>>>id(y)1786684560然而,當(dāng)為其中一個(gè)變量修改值以后,其內(nèi)存地址將會(huì)變化,但這并不影響另一個(gè)變量,例如接著上面的代碼再繼續(xù)執(zhí)行下面的代碼:>>>x+=6>>>id(x)1786684752>>>y3>>>id(y4.2Python變量Python采用基于值的內(nèi)存管理方式,如果為不同變量賦值為相同值,這個(gè)值在內(nèi)存中只保存一份,多個(gè)變量指向同一個(gè)值的內(nèi)存空間首地址,這樣可以減少內(nèi)存空間的占用,提高內(nèi)存利用率。Python啟動(dòng)時(shí),會(huì)對(duì)[-5,256]區(qū)間的整數(shù)進(jìn)行緩存。也就是說,如果多個(gè)變量的值相等且介于[-5,256]區(qū)間內(nèi),那么這些變量共用同一個(gè)值的內(nèi)存空間。對(duì)于區(qū)間[-5,256]區(qū)間之外的整數(shù),同一個(gè)程序中或交互模式下同一個(gè)語句中的同值不同名變量會(huì)共用同一個(gè)內(nèi)存空間,不同程序或交互模式下不同語句不遵守這個(gè)約定。1.4.2Python變量>>>x=-6>>>y=-6>>>id(x)==id(y)False>>>x=-5>>>y=-5>>>id(x)==id(y)True>>>x=255>>>y=255>>>id(x)==id(y)True>>>x=256>>>y=256>>>id(x)==id(y)True>>>x=257>>>y=257>>>id(x)==id(y)False>>>x=3.0>>>y=3.0>>>id(x)==id(y)False>>>x,y=300000,300000>>>id(x)==id(y)True>>>x=[666666,666666]>>>y=(666666,666666)>>>id(x[0])==id(x[1])True>>>id(y[0])==id(y[1])True>>>id(x[0])==id(y[0])False1.4.2Python變量創(chuàng)建程序文件memoryTest.py,編寫下面的代碼并運(yùn)行,會(huì)發(fā)現(xiàn)兩次輸出結(jié)果都為True。x=30000000000y=30000000000print(id(x)==id(y))x=3.4y=3.4print(id(x)==id(y))Python不會(huì)對(duì)實(shí)數(shù)進(jìn)行緩存,交互模式下同值不同名的變量不共用同一個(gè)內(nèi)存空間,同一個(gè)程序中的同值不同名變量會(huì)共用同一個(gè)內(nèi)存空間。1.4.2Python變量賦值語句的執(zhí)行過程是:首先把等號(hào)右側(cè)表達(dá)式的值計(jì)算出來,然后在內(nèi)存中尋找一個(gè)位置把值存放進(jìn)去,最后創(chuàng)建變量并指向這個(gè)內(nèi)存地址。Python中的變量并不直接存儲(chǔ)值,而是存儲(chǔ)了值的內(nèi)存地址或者引用,這也是變量類型隨時(shí)可以改變的原因。Python具有自動(dòng)管理內(nèi)存的功能,會(huì)跟蹤所有的值,并自動(dòng)刪除不再使用或者引用次數(shù)為0的值。如果確定某個(gè)變量不再使用,可以使用del命令顯式刪除該變量,值的引用次數(shù)減1,當(dāng)某個(gè)值的引用次數(shù)變?yōu)?時(shí),將會(huì)被Python的垃圾回收機(jī)制自動(dòng)刪除并釋放內(nèi)存空間。1.4.2Python變量在定義變量名的時(shí)候,需要注意以下問題:變量名必須以字母、漢字或下劃線開頭,但以下劃線開頭的變量在Python中有特殊含義;變量名中不能有空格以及標(biāo)點(diǎn)符號(hào)(括號(hào)、引號(hào)、逗號(hào)、斜線、反斜線、冒號(hào)、句號(hào)、問號(hào)等等);不能使用關(guān)鍵字作變量名,可以導(dǎo)入keyword模塊后使用print(keyword.kwlist)查看所有Python關(guān)鍵字;不建議使用系統(tǒng)內(nèi)置的模塊名、類型名或函數(shù)名以及已導(dǎo)入的模塊名及其成員名作變量名,這將會(huì)改變其類型和含義,可以通過dir(__builtins__)查看所有內(nèi)置模塊、類型和函數(shù);變量名對(duì)英文字母的大小寫敏感,例如student和Student是不同的變量。1.4.3數(shù)字可以表示任意大小的數(shù)值。>>>a=99999999999999999999999999999999>>>a*a9999999999999999999999999999999800000000000000000000000000000001>>>a**39999999999999999999999999999999700000000000000000000000000000002999999999999999999999999999999991.4.3數(shù)字Python中的整數(shù)類型可以分為:十進(jìn)制整數(shù)如,0、-1、9、123十六進(jìn)制整數(shù),需要16個(gè)數(shù)字0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f來表示整數(shù),必須以0x開頭,如0x10、0xfa、0xabcdef八進(jìn)制整數(shù),只需要8個(gè)數(shù)字0、1、2、3、4、5、6、7來表示整數(shù),必須以0o開頭,如0o35、0o11二進(jìn)制整數(shù),只需要2個(gè)數(shù)字0、1來表示整數(shù),必須以0b開頭如,0b101、0b1001.4.3數(shù)字浮點(diǎn)數(shù)又稱小數(shù)15.0、0.37、-11.2、1.2e2、314.15e-21.4.3數(shù)字Python內(nèi)置支持復(fù)數(shù)類型。>>>a=3+4j>>>b=5+6j>>>c=a+b>>>c(8+10j)>>>c.real#查看復(fù)數(shù)實(shí)部8.0>>>c.imag#查看復(fù)數(shù)虛部10.0>>>a.conjugate()#返回共軛復(fù)數(shù)(3-4j)>>>a*b#復(fù)數(shù)乘法(-9+38j)>>>a/b#復(fù)數(shù)除法(0.6393442622950819+0.03278688524590165j)Python3.6.x開始支持在數(shù)字中間位置使用單個(gè)下劃線作為分隔來提高數(shù)字的可讀性,類似于數(shù)學(xué)上使用逗號(hào)作為千位分隔符。>>>1_000_0001000000>>>1_2_3_41234>>>1_2+3_4j(12+34j)>>>1_2.3_4512.3451.4.3數(shù)字1.4.4字符串用單引號(hào)、雙引號(hào)或三引號(hào)界定的符號(hào)系列稱為字符串。字符串屬于不可變序列。單引號(hào)、雙引號(hào)、三單引號(hào)、三雙引號(hào)可以互相嵌套,用來表示復(fù)雜字符串。'abc'、'123'、'中國(guó)'、"Python"、'''Tomsaid,"Let'sgo"'''空字符串表示為''或""

。三引號(hào)'''或"""表示的字符串可以換行,支持排版較為復(fù)雜的字符串;三引號(hào)還可以在程序中表示較長(zhǎng)的注釋。1.4.4字符串常用轉(zhuǎn)義字符轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\b退格,把光標(biāo)移動(dòng)到前一列位置\\一個(gè)斜線\\f換頁符\’單引號(hào)’\n換行符\”雙引號(hào)”\r回車\ooo3位八進(jìn)制數(shù)對(duì)應(yīng)的字符\t水平制表符\xhh2位十六進(jìn)制數(shù)對(duì)應(yīng)的字符\v垂直制表符\uhhhh4位十六進(jìn)制數(shù)表示的Unicode字符1.4.4字符串字符串界定符前面加字母r或R表示原始字符串,其中的特殊字符不進(jìn)行轉(zhuǎn)義,但字符串的最后一個(gè)字符不能是\。原始字符串主要用于正則表達(dá)式、文件路徑或者URL的場(chǎng)合。>>>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.exe1.4.5運(yùn)算符和表達(dá)式運(yùn)算符功能說明+算術(shù)加法,列表、元組、字符串合并與連接,正號(hào)-算術(shù)減法,集合差集,相反數(shù)*算術(shù)乘法,序列重復(fù)/真除法//求整商,但如果操作數(shù)中有實(shí)數(shù)的話,結(jié)果為實(shí)數(shù)形式的整數(shù)%求余數(shù),字符串格式化**冪運(yùn)算<、<=、>、>=、==、!=大小比較,集合的包含關(guān)系比較or邏輯或and邏輯與not邏輯非in成員測(cè)試is對(duì)象同一性測(cè)試,即測(cè)試是否為同一個(gè)對(duì)象或內(nèi)存地址是否相同|、^、&、<<、>>、~位或、位異或、位與、左移位、右移位、位求反&、|、^集合交集、并集、對(duì)稱差集Python運(yùn)算符與功能1.4.5運(yùn)算符和表達(dá)式運(yùn)算符描述:=賦值表達(dá)式,Python3.8新增lambdalambda表達(dá)式if--else條件表達(dá)式or邏輯或運(yùn)算and邏輯與運(yùn)算not邏輯非運(yùn)算in,notin,is,isnot,<,<=,>,>=,!=,==測(cè)試、比較|位或運(yùn)算^位異或運(yùn)算&位與運(yùn)算<<,>>左移位,右移位+,-加,減*,@,/,//,%乘,矩陣乘,除,整除,取余+x,-x,~x正,負(fù),位求反**冪運(yùn)算,具有右結(jié)合性awaitxawait表達(dá)式x[index],x[index:index],x(arguments...),x.attribute抽取,切片,調(diào)用,屬性引用(expressions...),[expressions...],{key:value...},{expressions...}綁定或加圓括號(hào)的表達(dá)式,列表顯示,字典顯示,集合顯示優(yōu)先級(jí)從低到高+運(yùn)算符除了用于算術(shù)加法以外,還可以用于列表、元組、字符串的連接,但不支持不同類型的對(duì)象之間相加或連接。>>>[1,2,3]+[4,5,6]#連接兩個(gè)列表[1,2,3,4,5,6]>>>(1,2,3)+(4,)#連接兩個(gè)元組(1,2,3,4)>>>'abcd'+'1234'#連接兩個(gè)字符串'abcd1234'>>>'A'+1#不支持字符與數(shù)字相加,拋出異常TypeError:Can'tconvert'int'objecttostrimplicitly>>>True+3#Python內(nèi)部把True當(dāng)作1處理4>>>False+3#把False當(dāng)作0處理31.4.5運(yùn)算符和表達(dá)式1.4.5運(yùn)算符和表達(dá)式*運(yùn)算符不僅可以用于數(shù)值乘法,還可以用于列表、字符串、元組等類型,當(dāng)列表、字符串或元組等類型變量與整數(shù)進(jìn)行“*”運(yùn)算時(shí),表示對(duì)內(nèi)容進(jìn)行重復(fù)并返回重復(fù)后的新對(duì)象。>>>2.0*3

#浮點(diǎn)數(shù)與整數(shù)相乘6.0>>>(3+4j)*2

#復(fù)數(shù)與整數(shù)相乘(6+8j)>>>(3+4j)*(3-4j)

#復(fù)數(shù)與復(fù)數(shù)相乘(25+0j)>>>"a"*10

#字符串重復(fù)'aaaaaaaaaa'>>>[1,2,3]*3

#列表重復(fù)[1,2,3,1,2,3,1,2,3]>>>(1,2,3)*3

#元組重復(fù)(1,2,3,1,2,3,1,2,3)1.4.5運(yùn)算符和表達(dá)式Python中的除法有兩種,“/”和“//”分別表示除法和整除運(yùn)算。>>>3/50.6>>>3//50>>>3.0/50.6>>>3.0//50.0>>>13//101>>>-13//10-21.4.5運(yùn)算符和表達(dá)式%運(yùn)算符除去可以用于字符串格式化之外,還可以對(duì)整數(shù)和浮點(diǎn)數(shù)計(jì)算余數(shù)。但是由于浮點(diǎn)數(shù)的精確度影響,計(jì)算結(jié)果可能略有誤差。>>>3.1%21.1>>>6.3%2.12.0999999999999996>>>6%20>>>-17%4#余數(shù)與%右側(cè)的運(yùn)算數(shù)符號(hào)一致3>>>17%-4#(17-(-3))能被(-4)整除-3>>>5.7%4.80.9000000000000004關(guān)系運(yùn)算符可以連用,一般用于同類型對(duì)象之間值的大小比較,或者測(cè)試集合之間的包含關(guān)系。>>>1<3<5#等價(jià)于1<3and3<5True>>>'Hello'>'world'#比較字符串大小False>>>[1,2,3]<[1,2,4]#比較列表大小True>>>'Hello'>3#字符串和數(shù)字不能比較TypeError:unorderabletypes:str()>int()>>>{1,2,3}<{1,2,3,4}#測(cè)試是否子集True1.4.5運(yùn)算符和表達(dá)式成員測(cè)試運(yùn)算符in用于成員測(cè)試,即測(cè)試一個(gè)對(duì)象是否為另一個(gè)對(duì)象的元素。>>>3in[1,2,3]#測(cè)試3是否存在于列表[1,2,3]中True>>>5inrange(1,10,1)#range()是用來生成指定范圍數(shù)字的內(nèi)置函數(shù)True>>>'abc'in'abcdefg'#子字符串測(cè)試True>>>foriin(3,5,7):#循環(huán),成員遍歷print(i,end='\t')#注意,這里打兩個(gè)回車才會(huì)執(zhí)行3 5 7 1.4.5運(yùn)算符和表達(dá)式同一性測(cè)試運(yùn)算符(identitycomparison)is用來測(cè)試兩個(gè)對(duì)象是否是同一個(gè),如果是則返回True,否則返回False。如果兩個(gè)對(duì)象是同一個(gè),二者具有相同的內(nèi)存地址。>>>3is3True>>>x=[300,300,300]>>>x[0]isx[1]#基于值的內(nèi)存管理,同一個(gè)值在內(nèi)存中只有一份True>>>x=[1,2,3]>>>y=[1,2,3]>>>xisy#上面形式創(chuàng)建的x和y不是同一個(gè)列表對(duì)象False1.4.5運(yùn)算符和表達(dá)式位運(yùn)算符只能用于整數(shù),其內(nèi)部執(zhí)行過程為:首先將整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),然后右對(duì)齊,必要的時(shí)候左側(cè)補(bǔ)0,按位進(jìn)行運(yùn)算,最后再把計(jì)算結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)字返回。>>>3<<2#把3左移2位12>>>3&7#位與運(yùn)算3>>>3|8#位或運(yùn)算11>>>3^5#位異或運(yùn)算61.4.5運(yùn)算符和表達(dá)式位運(yùn)算符規(guī)則集合的交集、并集、對(duì)稱差集等運(yùn)算借助于位運(yùn)算符來實(shí)現(xiàn),而差集則使用減號(hào)運(yùn)算符實(shí)現(xiàn)(注意,并集運(yùn)算符不是加號(hào))。>>>{1,2,3}|{3,4,5}#并集,自動(dòng)去除重復(fù)元素{1,2,3,4,5}>>>{1,2,3}&{3,4,5}#交集{3}>>>{1,2,3}^{3,4,5}#對(duì)稱差集{1,2,4,5}>>>{1,2,3}-{3,4,5}#差集{1,2}1.4.5運(yùn)算符和表達(dá)式and和or具有惰性求值特點(diǎn),只計(jì)算必須計(jì)算的表達(dá)式。>>>3>5anda>3#注意,此時(shí)并沒有定義變量aFalse>>>3>5ora>3#3>5的值為False,所以需要計(jì)算后面表達(dá)式NameError:name'a'isnotdefined>>>3<5ora>3#3<5的值為True,不需要計(jì)算后面表達(dá)式True>>>3and5#最后一個(gè)計(jì)算的表達(dá)式的值作為整個(gè)表達(dá)式的值5>>>3and5>2True>>>3notin[1,2,3]#邏輯非運(yùn)算notFalse>>>3isnot5#not的計(jì)算結(jié)果只能是True或False之一True1.4.5運(yùn)算符和表達(dá)式1.4.5運(yùn)算符和表達(dá)式逗號(hào)并不是運(yùn)算符,只是一個(gè)普通分隔符。>>>'a'in'b','a'(False,'a')>>>'a'in('b','a')True>>>x=3,5>>>x(3,5)>>>3==3,5(True,5)>>>x=3+5,7>>>x(8,7)Python不支持++和--運(yùn)算符,只是兩個(gè)連續(xù)的加號(hào)和減號(hào)。>>>i=3>>>++i#正正得正3>>>+(+3)#與++i等價(jià)3>>>i++#Python不支持++運(yùn)算符,語法錯(cuò)誤SyntaxError:invalidsyntax>>>--i#負(fù)負(fù)得正3>>>-(-i)#與--i等價(jià)31.4.5運(yùn)算符和表達(dá)式1.4.5運(yùn)算符和表達(dá)式在Python中,單個(gè)任何類型的對(duì)象或常數(shù)屬于合法表達(dá)式,使用運(yùn)算符連接的變量和常量以及函數(shù)調(diào)用的任意組合也屬于合法的表達(dá)式。>>>a=[1,2,3]>>>b=[4,5,6]>>>c=a+b>>>c[1,2,3,4,5,6]>>>d=list(map(str,c))>>>d['1','2','3','4','5','6']>>>importmath>>>list(map(math.sin,c))[0.8414709848078965,0.9092974268256817,0.1411200080598672,-0.7568024953079282,-0.9589242746631385,-0.27941549819892586]>>>'Hello'+''+'world''Helloworld'>>>'welcome'*3'welcomewelcomewelcome'>>>('welcome,'*3).rstrip(',')+'!''welcome,welcome,welcome!'1.4.6常用內(nèi)置函數(shù)內(nèi)置函數(shù)不需要導(dǎo)入任何模塊即可使用執(zhí)行下面的命令可以列出所有內(nèi)置函數(shù)>>>dir(__builtins__)函數(shù)功能簡(jiǎn)要說明abs(x)返回?cái)?shù)字x的絕對(duì)值或復(fù)數(shù)x的模all(iterable)如果對(duì)于可迭代對(duì)象中所有元素x都等價(jià)于True,也就是對(duì)于所有元素x都有bool(x)等于True,則返回True。對(duì)于空的可迭代對(duì)象也返回Trueany(iterable)只要可迭代對(duì)象iterable中存在元素x使得bool(x)為True,則返回True。對(duì)于空的可迭代對(duì)象,返回Falseascii(obj)把對(duì)象轉(zhuǎn)換為ASCII碼表示形式,必要的時(shí)候使用轉(zhuǎn)義字符來表示特定的字符bin(x)把整數(shù)x轉(zhuǎn)換為二進(jìn)制串表示形式bool(x)返回與x等價(jià)的布爾值True或Falsebytes(x)生成字節(jié)串,或把指定對(duì)象x轉(zhuǎn)換為字節(jié)串表示形式callable(obj)測(cè)試對(duì)象obj是否可調(diào)用。類和函數(shù)是可調(diào)用的,包含__call__()方法的類的對(duì)象也是可調(diào)用的compile()用于把Python代碼編譯成可被exec()或eval()函數(shù)執(zhí)行的代碼對(duì)象complex(real,[imag])返回復(fù)數(shù)chr(x)返回Unicode編碼為x的字符1.4.6常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說明delattr(obj,name)刪除屬性,等價(jià)于deldir(obj)返回指定對(duì)象或模塊obj的成員列表,如果不帶參數(shù)則返回當(dāng)前作用域內(nèi)所有標(biāo)識(shí)符divmod(x,y)返回包含整商和余數(shù)的元組((x-x%y)/y,x%y)enumerate(iterable[,start])返回包含元素形式為(0,iterable[0]),(1,iterable[1]),(2,iterable[2]),...的迭代器對(duì)象eval(s[,globals[,locals]])計(jì)算并返回字符串s中表達(dá)式的值exec(x)執(zhí)行代碼或代碼對(duì)象xexit()退出當(dāng)前解釋器環(huán)境filter(func,seq)返回filter對(duì)象,其中包含序列seq中使得單參數(shù)函數(shù)func返回值為True的那些元素,如果函數(shù)func為None則返回包含seq中等價(jià)于True的元素的filter對(duì)象float(x)把整數(shù)或字符串x轉(zhuǎn)換為浮點(diǎn)數(shù)并返回frozenset([x]))創(chuàng)建不可變的集合對(duì)象getattr(obj,name[,default])獲取對(duì)象中指定屬性的值,等價(jià)于,如果不存在指定屬性則返回default的值,如果要訪問的屬性不存在并且沒有指定default則拋出異常1.4.6常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說明globals()返回包含當(dāng)前作用域內(nèi)全局變量及其值的字典hasattr(obj,name)測(cè)試對(duì)象obj是否具有名為name的成員hash(x)返回對(duì)象x的哈希值,如果x不可哈希則拋出異常help(obj)返回對(duì)象obj的幫助信息hex(x)把整數(shù)x轉(zhuǎn)換為十六進(jìn)制串id(obj)返回對(duì)象obj的標(biāo)識(shí)(內(nèi)存地址)input([提示])顯示提示,接收鍵盤輸入的內(nèi)容,返回字符串int(x[,d])返回實(shí)數(shù)(float)、分?jǐn)?shù)(Fraction)或高精度實(shí)數(shù)(Decimal)x的整數(shù)部分,或把d進(jìn)制的字符串x轉(zhuǎn)換為十進(jìn)制并返回,d默認(rèn)為十進(jìn)制isinstance(obj,class-or-type-or-tuple)測(cè)試對(duì)象obj是否屬于指定類型(如果有多個(gè)類型的話需要放到元組中)的實(shí)例iter(...)返回指定對(duì)象的可迭代對(duì)象len(obj)返回對(duì)象obj包含的元素個(gè)數(shù),適用于列表、元組、集合、字典、字符串以及range對(duì)象和其他可迭代對(duì)象1.4.6常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說明list([x])、set([x])、tuple([x])、dict([x])把對(duì)象x轉(zhuǎn)換為列表、集合、元組或字典并返回,或生成空列表、空集合、空元組、空字典locals()返回包含當(dāng)前作用域內(nèi)局部變量及其值的字典map(func,*iterables)返回包含若干函數(shù)值的map對(duì)象,函數(shù)func的參數(shù)分別來自于iterables指定的每個(gè)迭代對(duì)象,max(x)、min(x)返回可迭代對(duì)象x中的最大值、最小值,要求x中的所有元素之間可比較大小,允許指定排序規(guī)則和x為空時(shí)返回的默認(rèn)值next(iterator[,default])返回可迭代對(duì)象x中的下一個(gè)元素,允許指定迭代結(jié)束之后繼續(xù)迭代時(shí)返回的默認(rèn)值oct(x)把整數(shù)x轉(zhuǎn)換為八進(jìn)制串open(name[,mode])以指定模式mode打開文件name并返回文件對(duì)象ord(x)返回1個(gè)字符x的Unicode編碼pow(x,y,z=None)返回x的y次方,等價(jià)于x**y或(x**y)%z1.4.6常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說明print(value,...,sep='',end='\n',file=sys.stdout,flush=False)基本輸出函數(shù)quit()退出當(dāng)前解釋器環(huán)境range([start,]end[,step])返回range對(duì)象,其中包含左閉右開區(qū)間[start,end)內(nèi)以step為步長(zhǎng)的整數(shù)reduce(func,sequence[,initial])將雙參數(shù)的函數(shù)func以迭代的方式從左到右依次應(yīng)用至序列seq中每個(gè)元素,最終返回單個(gè)值作為結(jié)果。在Python2.x中該函數(shù)為內(nèi)置函數(shù),在Python3.x中需要從functools中導(dǎo)入reduce函數(shù)再使用repr(obj)返回對(duì)象obj的規(guī)范化字符串表示形式,對(duì)于大多數(shù)對(duì)象有eval(repr(obj))==objreversed(seq)返回seq(可以是列表、元組、字符串、range以及其他可迭代對(duì)象)中所有元素逆序后的迭代器對(duì)象1.4.6常用內(nèi)置函數(shù)函數(shù)功能簡(jiǎn)要說明round(x[,小數(shù)位數(shù)])對(duì)x進(jìn)行四舍五入,若不指定小數(shù)位數(shù),則返回整數(shù)sorted(iterable,key=None,reverse=False)返回排序后的列表,其中iterable表示要排序的序列或迭代對(duì)象,key用來指定排序規(guī)則或依據(jù),reverse用來指定升序或降序。該函數(shù)不改變iterable內(nèi)任何元素的順序str(obj)把對(duì)象obj直接轉(zhuǎn)換為字符串sum(x,start=0)返回序列x中所有元素之和,返回start+sum(x)type(obj)返回對(duì)象obj的類型zip(seq1[,seq2[...]])返回zip對(duì)象,其中元素為(seq1[i],seq2[i],...)形式的元組,最終結(jié)果中包含的元素個(gè)數(shù)取決于所有參數(shù)序列或可迭代對(duì)象中最短的那個(gè)1.4.6常用內(nèi)置函數(shù)1.4.6常用內(nèi)置函數(shù)dir()函數(shù)可以查看指定模塊中包含的所有成員或者指定對(duì)象類型所支持的操作。help()函數(shù)則返回指定模塊或函數(shù)的說明文檔。內(nèi)置函數(shù)bin()、oct()、hex()用來將整數(shù)轉(zhuǎn)換為二進(jìn)制、八進(jìn)制和十六進(jìn)制形式,這三個(gè)函數(shù)都要求參數(shù)必須為整數(shù)。>>>bin(555)#把數(shù)字轉(zhuǎn)換為二進(jìn)制串'0b1000101011'>>>oct(555)#轉(zhuǎn)換為八進(jìn)制串'0o1053'>>>hex(555)#轉(zhuǎn)換為十六進(jìn)制串'0x22b'1.4.6常用內(nèi)置函數(shù)1.4.6常用內(nèi)置函數(shù)內(nèi)置函數(shù)int()用來把實(shí)數(shù)轉(zhuǎn)換為整數(shù),或把數(shù)字字符串按指定進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)。>>>int(3.5)3>>>int(-3.5)-3>>>int('101',2)#二進(jìn)制5>>>int('101',16)#十六進(jìn)制257>>>int('x2',36)#36進(jìn)制1190>>>int('\t8\n')#自動(dòng)忽略數(shù)字兩側(cè)的空白字符81.4.6常用內(nèi)置函數(shù)ord()和chr()是一對(duì)功能相反的函數(shù),ord()用來返回單個(gè)字符的序數(shù)或Unicode碼,而chr()則用來返回某序數(shù)對(duì)應(yīng)的字符,str()則直接將其任意類型參數(shù)轉(zhuǎn)換為字符串。>>>ord('a')>>>chr(65)97

'A'>>>chr(ord('A')+1)>>>str(1)'B'

'1'>>>str(1234)>>>str([1,2,3])'1234'

'[1,2,3]'>>>str((1,2,3))>>>str({1,2,3})'(1,2,3)'

'{1,2,3}'1.4.6常用內(nèi)置函數(shù)max()、min()、sum()這三個(gè)內(nèi)置函數(shù)分別用于計(jì)算列表、元組或其他可迭代對(duì)象中所有元素最大值、最小值以及所有元素之和,sum()要求元素支持加法運(yùn)算,max()和min()則要求序列或可迭代對(duì)象中的元素之間可比較大小。>>>importrandom>>>a=[random.randint(1,100)foriinrange(10)]#列表推導(dǎo)式>>>a[72,26,80,65,34,86,19,74,52,40]>>>print(max(a),min(a),sum(a))8619548如果需要計(jì)算該列表中的所有元素的平均值,可以直接這樣用:>>>sum(a)/len(a)54.81.4.6常用內(nèi)置函數(shù)內(nèi)置函數(shù)max()和min()的key參數(shù)可以用來指定比較規(guī)則。>>>x=['21','1234','9']>>>max(x)'9'>>>max(x,key=len)'1234'>>>max(x,key=int)'1234'1.4.6常用內(nèi)置函數(shù)>>>fromrandomimportrandrange>>>x=[[randrange(1,100)foriinrange(10)]forjinrange(5)]>>>foriteminx:print(item)

[15,50,38,53,58,13,22,54,7,45][45,63,58,89,85,91,77,45,53,50][80,10,46,16,71,73,13,68,94,50][66,4,49,67,26,58,52,46,69,99][35,57,63,35,71,18,86,2,16,87]>>>max(x,key=sum)#求所有元素之和最大的子列表[45,63,58,89,85,91,77,45,53,50]這里要打兩個(gè)回車才會(huì)執(zhí)行代碼print相對(duì)于for有縮進(jìn),提示符>>>是占位置的內(nèi)置函數(shù)sum()的start參數(shù)可以實(shí)現(xiàn)非數(shù)值型列表元素的求和。>>>sum([1,2,3,4])10>>>sum([[1],[2],[3],[4]],[])[1,2,3,4]1.4.6常用內(nèi)置函數(shù)內(nèi)置函數(shù)type()和isinstance()可以判斷數(shù)據(jù)類型。>>>type([3])#查看[3]的類型<class'list'>>>>type({3})in(list,tuple,dict)#判斷{3}是否為list,tuple#或dict類型的實(shí)例False>>>isinstance(3,int)#判斷3是否為int類型的實(shí)例True>>>isinstance(3j,(int,float,complex))#判斷3j是否為int,float#或complex類型True1.4.6常用內(nèi)置函數(shù)sorted()對(duì)列表、元組、字典、集合或其他可迭代對(duì)象進(jìn)行排序并返回新列表。>>>x=['aaaa','bc','d','b','ba']>>>sorted(x,key=lambdaitem:(len(item),item))#先按長(zhǎng)度排序,長(zhǎng)度一樣的正常排序['b','d','ba','bc','aaaa']>>>importrandom>>>data=random.choices(range(50),k=11)>>>data[18,38,35,5,13,48,13,2,19,47,3]>>>sorted(data)[2,3,5,13,13,18,19,35,38,47,48]>>>sorted(data)[len(data)//2]#中位數(shù)181.4.6常用內(nèi)置函數(shù)reversed()對(duì)可迭代對(duì)象(生成器對(duì)象和具有惰性求值特性的zip、map、filter、enumerate等類似對(duì)象除外)進(jìn)行翻轉(zhuǎn)(首尾交換)并返回可迭代的reversed對(duì)象。>>>x=['aaaa','bc','d','b','ba']>>>reversed(x)#逆序,返回reversed對(duì)象<list_reverseiteratorobjectat0x0000000002E6C3C8>>>>list(reversed(x))#reversed對(duì)象是可迭代的['ba','b','d','bc','aaaa']1.4.6常用內(nèi)置函數(shù)range()語法格式為range([start,]end[,step]),返回具有惰性求值特點(diǎn)的range對(duì)象,其中包含左閉右開區(qū)間[start,end)內(nèi)以step為步長(zhǎng)的整數(shù)。參數(shù)start默認(rèn)為0,step默認(rèn)為1。>>>range(5)#start默認(rèn)為0,step默認(rèn)為1range(0,5)>>>list(_)[0,1,2,3,4]>>>list(range(1,10,2))#指定起始值和步長(zhǎng)[1,3,5,7,9]>>>list(range(9,0,-2))#步長(zhǎng)為負(fù)數(shù)時(shí),start應(yīng)比end大[9,7,5,3,1]1.4.6常用內(nèi)置函數(shù)enumerate()函數(shù)用來枚舉可迭代對(duì)象中的元素,返回可迭代的enumerate對(duì)象,其中每個(gè)元素都是包含索引和值的元組。>>>list(enumerate('abcd'))#枚舉字符串中的元素[(0,'a'),(1,'b'),(2,'c'),(3,'d')]>>>list(enumerate(['Python','Great']))#枚舉列表中的元素[(0,'Python'),(1,'Great')]>>>list(enumerate({'a':97,'b':98,'c':99}.items()))#枚舉字典中的元素[(0,('a',97)),(1,('b',98)),(2,('c',99))]>>>forindex,valueinenumerate(range(10,15)):#枚舉range對(duì)象中的元素print((index,value),end='')(0,10)(1,11)(2,12)(3,13)(4,14)1.4.6常用內(nèi)置函數(shù)內(nèi)置函數(shù)map()把一個(gè)函數(shù)func依次映射到序列或迭代器對(duì)象的每個(gè)元素上,并返回一個(gè)可迭代的map對(duì)象作為結(jié)果,map對(duì)象中每個(gè)元素是原序列中元素經(jīng)過函數(shù)func處理后的結(jié)果。>>>list(map(str,range(5)))#把列表中元素轉(zhuǎn)換為字符串['0','1','2','3','4']>>>defadd5(v):#單參數(shù)函數(shù)returnv+5>>>list(map(add5,range(10)))#把單參數(shù)函數(shù)映射到一個(gè)序列的所有元素[5,6,7,8,9,10,11,12,13,14]>>>defadd(x,y):#可以接收2個(gè)參數(shù)的函數(shù)returnx+y>>>list(map(add,range(5),range(5,10)))#把雙參數(shù)函數(shù)映射到兩個(gè)序列上[5,7,9,11,13]1.4.6常用內(nèi)置函數(shù)>>>importrandom>>>x=random.randint(1,1e30)#生成指定范圍內(nèi)的隨機(jī)整數(shù)>>>x839746558215897242220046223150>>>list(map(int,str(x)))#提取大整數(shù)每位上的數(shù)字[8,3,9,7,4,6,5,5,8,2,1,5,8,9,7,2,4,2,2,2,0,0,4,6,2,2,3,1,5,0]>>>defcheck(s,lst):#測(cè)試字符串是否包含列表中某個(gè)元素作為子串f=lambdaitem:iteminsreturnany(map(f,lst))>>>check('abcdefg',['c','e'])True>>>check('abcdefg',['i','h'])False1.4.6常用內(nèi)置函數(shù)1.4.6常用內(nèi)置函數(shù)fromitertoolsimportchainxData=[1,2,3,4]yData=[5,6,7,8]data=map(lambdax:map(lambday:(x,y),yData),xData)foriteminchain(*data):print(item,end='')運(yùn)行結(jié)果:(1,5)(1,6)(1,7)(1,8)(2,5)(2,6)(2,7)(2,8)(3,5)(3,6)(3,7)(3,8)(4,5)(4,6)(4,7)(4,8)標(biāo)準(zhǔn)庫(kù)functools中的函數(shù)reduce()可以將一個(gè)接收2個(gè)參數(shù)的函數(shù)以迭代累積的方式從左到右依次作用到一個(gè)序列或迭代器對(duì)象的所有元素上,并且允許指定一個(gè)初始值。>>>fromfunctoolsimportreduce>>>seq=list(range(1,10))>>>reduce(lambdax,y:x+y,seq)451.4.6常用內(nèi)置函數(shù)內(nèi)置函數(shù)filter()將一個(gè)單參數(shù)函數(shù)作用到一個(gè)序列上,返回該序列中使得該函數(shù)返回值為True的那些元素組成的filter對(duì)象,如果指定函數(shù)為None,則返回序列中等價(jià)于True的元素。>>>seq=['foo','x41','?!','***']>>>deffunc(x):returnx.isalnum()#測(cè)試是否為字母或數(shù)字>>>filter(func,seq)#返回filter對(duì)象<filterobjectat0x000000000305D898>>>>list(filter(func,seq))#把filter對(duì)象轉(zhuǎn)換為列表['foo','x41']>>>list(filter(str.isalnum,seq))#等價(jià)的用法['foo','x41']1.4.6常用內(nèi)置函數(shù)1.4.6常用內(nèi)置函數(shù)>>>data=list(range(20))>>>data[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]>>>filterObject=filter(lambdax:x%2==1,data)#過濾,只留下所有奇數(shù)>>>filterObject<filterobjectat0x000001D602B85828>>>>3infilterObject#3以及3之前的元素都訪問過了True>>>list(filterObject)#現(xiàn)在所有元素都訪問過了[5,7,9,11,13,15,17,19]>>>list(filterObject)#filterObject中不再包含任何元素[]zip()函數(shù)用來把多個(gè)可迭代對(duì)象中的元素壓縮到一起,返回一個(gè)可迭代的zip對(duì)象,其中每個(gè)元素都是包含原來的多個(gè)可迭代對(duì)象對(duì)應(yīng)位置上元素的元組,如同拉拉鏈一樣。>>>list(zip('abcd',[1,2,3]))#壓縮字符串和列表[('a',1),('b',2),('c',3)]>>>list(zip('123','abc',',.!'))#壓縮3個(gè)序列[('1','a',','),('2','b','.'),('3','c','!')]>>>x=zip('abcd','1234')>>>list(x)[('a','1'),('b','2'),('c','3'),('d','4')]1.4.6常用內(nèi)置函數(shù)map、filter、enumerate、zip等對(duì)象不僅具有惰性求值的特點(diǎn),還有另外一個(gè)特點(diǎn):訪問過的元素不可再次訪問。>>>x=map(str,range(10))>>>list(x)['0','1','2','3','4','5','6','7','8','9']>>>list(x)[]>>>x=map(str,range(10))>>>'2'inxTrue>>>'2'inxFalse>>>'8'inxFalse1.4.6常用內(nèi)置函數(shù)1.4.7基本輸入輸出用Python進(jìn)行程序設(shè)計(jì),輸入是通過input()函數(shù)來實(shí)現(xiàn)的,input()的一般格式為:x=input('提示:')該函數(shù)返回輸入的對(duì)象。可輸入數(shù)字、字符串和其它任意類型對(duì)象。1.4.7基本輸入輸出在Python3.x中,input()函數(shù)用來接收用戶的鍵盤輸入,不論用戶輸入數(shù)據(jù)時(shí)使用什么界定符,input()函數(shù)的返回結(jié)果都是字符串,需要將其轉(zhuǎn)換為相應(yīng)的類型再處理。>>>x=input('Pleaseinput:')Pleaseinput:3>>>print(type(x))<class'str'>>>>x=input('Pleaseinput:')Pleaseinput:'1'>>>print(type(x))<class'str'>>>>x=input('Pleaseinput:')Pleaseinput:[1,2,3]>>>print(type(x))<class'str'>1.4.7基本輸入輸出Python3.x中使用print()函數(shù)進(jìn)行輸出。>>>print(3,5,7)357>>>print(3,5,7,sep=',')#指定分隔符3,5,7>>>print(3,5,7,sep=':')3:5:7>>>foriinrange(10,20):print(i,end='')#不換行10111213141516171819試試下面的代碼在命令提示符環(huán)境會(huì)有什么樣的運(yùn)行效果:fromtimeimportsleepforiinrange(101):print(i,'%',end='\r')sleep(0.05)1.4.7基本輸入輸出1.4.8模塊導(dǎo)入與使用Python默認(rèn)安裝僅包含部分基本或核心模塊,但用戶可以安裝大量的擴(kuò)展模塊,pip是管理模塊的重要工具。在Python啟動(dòng)時(shí),僅加載了很少的一部分模塊,在需要時(shí)由程序員顯式地加載(可能需要先安裝)其他模塊。減小運(yùn)行的壓力,僅加載真正需要的模塊和功能,且具有很強(qiáng)的可擴(kuò)展性。可以使用sys.modules.items()顯示所有預(yù)加載模塊的相關(guān)信息。1.4.8模塊導(dǎo)入與使用import模塊名>>>importmath>>>math.sin(0.5)#求0.5的正弦>>>importrandom>>>x=random.random()#獲得[0,1)內(nèi)的隨機(jī)小數(shù)>>>y=random.random()>>>n=random.randint(1,100)#獲得[1,100]上的隨機(jī)整數(shù)可以使用dir()函數(shù)查看任意模塊中所有的對(duì)象列表,如果調(diào)用不帶參數(shù)的dir()函數(shù),則返回當(dāng)前作用域所有名字列表??梢允褂胔elp()函數(shù)查看任意模塊或函數(shù)的使用幫助。1.4.8模塊導(dǎo)入與使用from模塊名import對(duì)象名[as別名]#可以減少查詢次數(shù),提高執(zhí)行速度frommathimport*#謹(jǐn)慎使用>>>frommathimportsin>>>sin(3)0.1411200080598672>>>frommathimportsinasf#別名>>>f(3)0.1411200080598671.4.8模塊導(dǎo)入與使用在2.x中可以使用reload函數(shù)重新導(dǎo)入一個(gè)模塊,在3.x中,需要使用imp模塊的reload函數(shù)。Python首先在當(dāng)前目錄中查找需要導(dǎo)入的模塊文件,如果沒有找到則從sys模塊的path變量所指定的目錄中查找??梢允褂胹ys模塊的path變量查看python導(dǎo)入模塊時(shí)搜索模塊的路徑,也可以向其中append自定義的目錄以擴(kuò)展搜索路徑。在導(dǎo)入模塊時(shí),會(huì)優(yōu)先導(dǎo)入相應(yīng)的pyc文件,如果相應(yīng)的pyc文件與py文件時(shí)間不相符,則導(dǎo)入py文件并重新編譯該模塊。1.4.8模塊導(dǎo)入與使用導(dǎo)入模塊時(shí)的文件搜索順序當(dāng)前文件夾sys.path變量指定的文件夾優(yōu)先導(dǎo)入pyc文件1.4.8模塊導(dǎo)入與使用如果需要導(dǎo)入多個(gè)模塊,一般建議按如下順序進(jìn)行導(dǎo)入:標(biāo)準(zhǔn)庫(kù)成熟的第三方擴(kuò)展庫(kù)自己開發(fā)的庫(kù)1.5Python代碼規(guī)范(1)縮進(jìn)類定義、函數(shù)定義、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、with塊,行尾的冒號(hào)表示縮進(jìn)的開始。python程序是依靠代碼塊的縮進(jìn)來體現(xiàn)代碼之間的邏輯關(guān)系的,縮進(jìn)結(jié)束就表示一個(gè)代碼塊結(jié)束了。

同一個(gè)級(jí)別的代碼塊的縮進(jìn)量必須相同。一般而言,以4個(gè)空格為基本縮進(jìn)單位。1.5Python代碼規(guī)范(2)注釋以#開始,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論