




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Python爬蟲(chóng)應(yīng)用基礎(chǔ)
數(shù)1.1Python3的安裝與開(kāi)發(fā)環(huán)境配置1.2Python3的基礎(chǔ)1.3Python序列應(yīng)用1.4Python中的函數(shù)1.5模塊1.6面向?qū)ο?.7文件和異常1.8迭代器與生成器第一步首先是安裝Python3。相關(guān)鏈接如下:官方網(wǎng)站:下載地址:https:///downloads/第三方庫(kù):/官方文檔:/3/中文教程:/python3/python3-tutorial.html1.Python自帶開(kāi)發(fā)環(huán)境打開(kāi)IDLE使用cmd打開(kāi)Python3.8(64-bit)
1.Python自帶開(kāi)發(fā)環(huán)境PyCharm是一種專(zhuān)門(mén)為Python開(kāi)發(fā)的IDE,帶有一整套可以幫助用戶(hù)在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,比如調(diào)試、語(yǔ)法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制??梢愿鶕?jù)自己電腦的操作系統(tǒng)直去網(wǎng)址:/pycharm/download/#section=windows下載PyCharm社區(qū)版(免費(fèi)版)2.Pycharm與Python的開(kāi)發(fā)環(huán)境2.Pycharm運(yùn)行截圖2.Pycharm與Python的開(kāi)發(fā)環(huán)境安裝Anaconda時(shí)就自動(dòng)安裝Python了,同時(shí)它還帶有一個(gè)功能強(qiáng)大的IDE開(kāi)發(fā)工具Spider。Anaconda最大的好處是可以幫助用戶(hù)找到與安裝Python的各種各樣的開(kāi)發(fā)庫(kù),使得Python的開(kāi)發(fā)十分方便與高效。另外Anaconda對(duì)Windows用戶(hù)十分有用,因?yàn)镻ython的一些開(kāi)發(fā)庫(kù)在Windows環(huán)境下安裝常常出現(xiàn)這樣那樣的問(wèn)題,而Anaconda能順利解決這些問(wèn)題。Anaconda官網(wǎng)https:///distribution/,清華大學(xué)軟件鏡像站https:///anaconda/archive/(建議)2.Anaconda與Python的開(kāi)發(fā)環(huán)境在AnacondaNavigator中輸入要安裝的包,然后選中,點(diǎn)apply就可以安裝。2.Anaconda安裝包1.1Python3的安裝與開(kāi)發(fā)環(huán)境配置1.2Python3的基礎(chǔ)1.3Python序列應(yīng)用1.4Python中的函數(shù)1.5模塊1.6面向?qū)ο?.7文件和異常1.8迭代器與生成器1.Python的基本語(yǔ)法標(biāo)識(shí)符是Python給變量、常量、函數(shù)、語(yǔ)句塊或其他對(duì)象命名的有效符號(hào)。關(guān)鍵字是被編程語(yǔ)言?xún)?nèi)部定義并保留使用的標(biāo)識(shí)符。程序員編寫(xiě)程序不能定義與保留字相同的標(biāo)識(shí)符FalsedefifraisenonedelimportreturnTrueelifintryandelseiswhileasexceptlambdawithassertfinallynonlocalyieldbreakfornot
classfromor
continueglobalpass
表1-1Python3的33個(gè)關(guān)鍵字1.Python的基本語(yǔ)法注釋?zhuān)簡(jiǎn)涡凶⑨專(zhuān)阂话阋?號(hào)開(kāi)頭,單行注釋可以從行的中間開(kāi)始,它也可以單獨(dú)占一行多行注釋?zhuān)?.可以用多個(gè)#號(hào)占用多行2.可以是一對(duì)'''包含起來(lái)的多行3.用一對(duì)"""包含起來(lái)的多行1.Python的基本語(yǔ)法行與縮進(jìn):Python要求嚴(yán)格的代碼縮進(jìn),以Tab鍵或者4個(gè)空格進(jìn)行縮進(jìn),縮進(jìn)表示代碼之間的包含和層次關(guān)系1.Python的基本語(yǔ)法x=1ifx==1:print('HelloWorld')續(xù)行:Python要求嚴(yán)格的代碼縮進(jìn),以Tab鍵或者4個(gè)空格進(jìn)行縮進(jìn),縮進(jìn)表示代碼之間的包含和層次關(guān)系。1.Python的基本語(yǔ)法total=item_one+\item_two+\item_three續(xù)行:無(wú)需續(xù)行符可直接換行有兩種情況: 小括號(hào)、中括號(hào)、花括號(hào)的內(nèi)部可以多行書(shū)寫(xiě)。 三引號(hào)包括下的字符串也可以跨行書(shū)寫(xiě)。1.Python的基本語(yǔ)法
2數(shù)據(jù)類(lèi)型與常用函數(shù)
1.賦值2.字符串3.邏輯控制賦值每個(gè)變量在使用前都必須賦值,第一次對(duì)變量名賦值時(shí)自動(dòng)聲明該變量。1.賦值:等號(hào)(=)用來(lái)給變量賦值。等號(hào)(=)運(yùn)算符左邊是一個(gè)變量名,等號(hào)(=)運(yùn)算符右邊是存儲(chǔ)在變量中的值,即把等號(hào)右側(cè)的計(jì)算結(jié)果賦給左邊變量,包含(=)的語(yǔ)句稱(chēng)為賦值語(yǔ)句。。a=10#整型變量b=10.0#浮點(diǎn)型變量s="hello"#字符串變量賦值鏈?zhǔn)劫x值:同時(shí)為多個(gè)變量賦值,也稱(chēng)鏈?zhǔn)劫x值。基本格式為:變量1=變量2=變量3=1a=b=c=1賦值同步賦值:可以給同時(shí)給多個(gè)變量賦值。基本格式為:<變量1>,…,<變量N>=<表達(dá)式1>,…,<表達(dá)式N>a,b,c=1,2,"hello"數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型:變量可以有不同類(lèi)型的值,稱(chēng)之為數(shù)據(jù)類(lèi)型(datatype)。數(shù)據(jù)類(lèi)型表示數(shù)據(jù)的性質(zhì),有整數(shù)、小數(shù)、字符串等類(lèi)型。Python中的type()函數(shù)可以用來(lái)查看數(shù)據(jù)類(lèi)型。a=10print(type(a))b=Trueprint(type(b))c=3.14print(type(c))d="hello"print(type(d))數(shù)據(jù)類(lèi)型
int(整數(shù)),如1。整數(shù)類(lèi)型與數(shù)學(xué)中的整數(shù)概念一致,沒(méi)有取值范圍限制。
bool(布爾),如True。bool型取True或False中的一個(gè)值。
float(浮點(diǎn)數(shù)),如1.23、3E-2。浮點(diǎn)數(shù)是帶有小數(shù)點(diǎn)及小數(shù)的數(shù)字。取值范圍和精度基本無(wú)限制,運(yùn)算存在不確定尾數(shù)。
complex(復(fù)數(shù)),如1+2j、1.1+2.2j。與數(shù)學(xué)中的復(fù)數(shù)概念一致,z=a+bj,a是實(shí)數(shù)部分,b是虛數(shù)部分,a和b都是浮點(diǎn)類(lèi)型,虛數(shù)部分用j或者J標(biāo)識(shí)。數(shù)據(jù)類(lèi)型操作符及描述操作符描述x+
yx與y之和x-yx與y之差x*yx與y之積x/
yx與y之商
10/3結(jié)果是3.3333333333333335x//
yx與y之整數(shù)商,即:不大于x與y之商的最大整數(shù)10//3結(jié)果是3x%
yx與y之商的余數(shù),也稱(chēng)為模運(yùn)算,模運(yùn)算
10%3結(jié)果是1-xx的負(fù)值,即:x*(-1)+xx本身x**yx的y次冪,即:xy當(dāng)y是小數(shù)時(shí),開(kāi)方運(yùn)算
10**0.5結(jié)果是
2數(shù)據(jù)類(lèi)型與常用函數(shù)
1.賦值2.字符串3.邏輯控制字符串字符串是用單引號(hào)''、雙引號(hào)""或三引號(hào)括起來(lái)的一個(gè)或多個(gè)字符。s1='字符串's2="這是一個(gè)句子。"s3="""這是一個(gè)段落,可以由多行組成"""字符串Python字符串的兩種序號(hào)體系字符串索引和切片:索引(s[i]):返回字符串中單個(gè)字符取偏移i處的內(nèi)容(第一項(xiàng)在偏移量0處)負(fù)索引意味著從未尾開(kāi)始數(shù)(相當(dāng)于加上長(zhǎng)度)S[0]取回第一項(xiàng)S[-2]取回倒數(shù)第二個(gè)內(nèi)容(等同于S[len(S)-2])字符串切片(s[i:j]):返回字符串中一段字符子串提取序列中的鄰接段若忽略的話(huà),分片的邊界默認(rèn)為0和序列的長(zhǎng)度S[1:3]從偏移1向上取到第3項(xiàng),但不包括第3項(xiàng)S[1:]從位移量1處一直取到結(jié)尾S[:-1]從位移量0處直至取到最后,但不包括最后的一項(xiàng)字符串切片高級(jí)用法:使用[M:N:K]根據(jù)步長(zhǎng)對(duì)字符串切片<字符串>[M:N],M缺失表示至開(kāi)頭,N缺失表示至結(jié)尾"〇一二三四五六七八九十"[:3]結(jié)果是"〇一二"<字符串>[M:N:K],根據(jù)步長(zhǎng)K對(duì)字符串切片"〇一二三四五六七八九十"[1:8:2]結(jié)果是"一三五七""〇一二三四五六七八九十"[::-1]結(jié)果是"十九八七六五四三二一〇"字符串索引和切片:s='HelloWorld'print(s[0])#從頭索引,輸出結(jié)果為dprint(s[-2])#從尾部索引,輸出結(jié)果為lprint(s[1:3])#分片:提取片段。輸出結(jié)果為elprint(s[1:])#輸出結(jié)果為elloWorldprint(s[:-1])#輸出結(jié)果為HelloWorl字符串字符串的“加法+”和“乘法*”
加法操作(+)將兩個(gè)字符串連接成為一個(gè)新的字符串 乘法操作(*)生成一個(gè)由其本身字符串重復(fù)連接而成的字符串S1='Hello'S2='World'print(S1+S2)#輸出結(jié)果為'HelloWorld'print(3*S1)#輸出結(jié)果為'HelloHelloHello'1.2Python3的基礎(chǔ)字符串處理函數(shù)及描述函數(shù)描述str(x)任意類(lèi)型x所對(duì)應(yīng)的字符串形式str(1.23)結(jié)果為"1.23"str([1,2])結(jié)果為"[1,2]"hex(x)整數(shù)x的十六進(jìn)制小寫(xiě)形式字符串hex(425)結(jié)果為"0x1a9"oct(x)整數(shù)x的八進(jìn)制小寫(xiě)形式字符串oct(425)結(jié)果為"0o651"chr(u)x為Unicode編碼,返回其對(duì)應(yīng)的字符ord(x)x為字符,返回其對(duì)應(yīng)的Unicode編碼操作含義+連接*重復(fù)<string>[]索引<string>[:]剪切l(wèi)en(<string>)長(zhǎng)度返回字符串x的長(zhǎng)度len("一二三456")結(jié)果為6<string>.upper()字符串中字母小寫(xiě)轉(zhuǎn)大寫(xiě)<string>.lower()字符串中字母大寫(xiě)轉(zhuǎn)小寫(xiě)<string>
.split(str="",num=-1)按指定字符分割字符串為數(shù)組<string>.replace(old,new[,max])字符串替換<string>.
strip([chars])去兩邊空格及去指定字符<string>.
join(sequence)連接兩個(gè)字符串序列<string>
.find(str,beg=0,end=len(string))搜索指定字符串,如果找到此方法返回的索引,否則返回-1。<string>.format(<逗號(hào)分隔的參數(shù)>)字符串格式化方法for<var>in<string>字符串迭代字符串常用字符串操作及含義
2數(shù)據(jù)類(lèi)型與常用函數(shù)
1.賦值2.字符串3.邏輯控制3邏輯控制1.程序的基本結(jié)構(gòu)程序由三種基本結(jié)構(gòu)即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)組成。這些基本結(jié)構(gòu)都有有一個(gè)特點(diǎn),即只有一個(gè)入口和一個(gè)出口。任何程序都由這三種基本結(jié)構(gòu)組合而成。程序的控制結(jié)構(gòu)-
順序結(jié)構(gòu)-
分支結(jié)構(gòu)-
循環(huán)結(jié)構(gòu)條件
?是第1步驟第2步驟選擇A選擇B否條件
?是語(yǔ)句塊否操作符數(shù)學(xué)符號(hào)描述<
<
小于<=≤小于等于>=≥大于等于>
>
大于===等于!=≠不等于if語(yǔ)句中條件部分可以使用任何能產(chǎn)生True或False的語(yǔ)句。形成判斷條件最常用的方式是采用關(guān)系操作。Python語(yǔ)言有6種關(guān)系操作符,如下表所示。Python的關(guān)系操作符Python用于條件組合的三個(gè)保留字操作符及使用描述xandy兩個(gè)條件x和y的邏輯與xory兩個(gè)條件x和y的邏輯或notx條件x的邏輯非猜數(shù)游戲1.分支結(jié)構(gòu)number=23guess=int(input('Enteraninteger:'))ifguess==number:print('猜對(duì)了')猜數(shù)游戲2.
二分支結(jié)構(gòu):if-else語(yǔ)句number=23guess=int(input('Enteraninteger:'))ifguess==number:print('猜對(duì)了')else:print('猜錯(cuò)了')猜數(shù)游戲2.
二分支緊湊形式number=23guess=int(input('Enteraninteger:'))print("猜{}了".format("對(duì)"ifguess==numberelse"錯(cuò)"))猜數(shù)游戲3.多分支結(jié)構(gòu):if-else語(yǔ)句number=23guess=int(input('Enteraninteger:'))ifguess==number:#新塊從這里開(kāi)始print('猜對(duì)了')print('但是你還得不到獎(jiǎng)勵(lì)')#新塊在這里結(jié)束elifguess<number:#另一代碼塊print('請(qǐng)猜一個(gè)更大一些的數(shù)字')#你可以在此做任何你希望在該代碼塊內(nèi)進(jìn)行的事情else:print('請(qǐng)猜一個(gè)更小一些的數(shù)字')#你必須通過(guò)猜測(cè)一個(gè)大于(>)設(shè)置數(shù)的數(shù)字來(lái)到達(dá)這里。print('完成')猜數(shù)游戲4.無(wú)限循環(huán)結(jié)構(gòu):while語(yǔ)句number=23running=Truewhilerunning:guess=int(input('Enteraninteger:'))ifguess==number:print('猜對(duì)了')#這將導(dǎo)致while循環(huán)中止running=Falseelifguess<number:print('請(qǐng)猜一個(gè)更大一些的數(shù)字')else:print('請(qǐng)猜一個(gè)更小一些的數(shù)字')else:print('while循環(huán)結(jié)束')#在這里你可以做你想做的任何事print('Done')遍歷循環(huán)Python通過(guò)保留字for實(shí)現(xiàn)“遍歷循環(huán)”:for <循環(huán)變量> in <遍歷結(jié)構(gòu)>:<語(yǔ)句塊>for...in語(yǔ)句是另一種循環(huán)語(yǔ)句,其特點(diǎn)是會(huì)在一系列對(duì)象上進(jìn)行迭代(Iterates),意即它會(huì)遍歷序列中的每一個(gè)項(xiàng)目。遍歷循環(huán)也可以擁有else子句作為可選選項(xiàng),使用方法如下:for<循環(huán)變量> in <遍歷結(jié)構(gòu)>:<語(yǔ)句塊1>else:<語(yǔ)句塊2>foriinrange(1,5):print(i)else:print('Theforloopisover')for...in能在任何序列中工作字符串遍歷循環(huán)for
c in s:<語(yǔ)句塊>-s是字符串,遍歷字符串每個(gè)字符,產(chǎn)生循環(huán)列表遍歷循環(huán)
for
itemin ls:<語(yǔ)句塊>
-ls是一個(gè)列表,遍歷其每個(gè)元素,產(chǎn)生循環(huán)文件遍歷循環(huán)for
line in fi:<語(yǔ)句塊>-fi是一個(gè)文件標(biāo)識(shí)符,遍歷其每行,產(chǎn)生循環(huán)break和continuecontinue語(yǔ)句和break語(yǔ)句的區(qū)別是:continue語(yǔ)句只結(jié)束本次循環(huán),而不終止整個(gè)循環(huán)的執(zhí)行。break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立whileTrue:s=input('Entersomething:')ifs=='quit':breakiflen(s)<3:print('Toosmall')continueprint('Inputisofsufficientlength')#自此處起繼續(xù)進(jìn)行其它任何處理1.1Python3的安裝與開(kāi)發(fā)環(huán)境配置1.2Python3的基礎(chǔ)1.3Python序列應(yīng)用1.4Python中的函數(shù)1.5模塊1.6面向?qū)ο?.7文件和異常1.8迭代器與生成器序列類(lèi)型的通用操作符和函數(shù)(共11個(gè))操作符描述xins如果x是序列s的元素,返回True,否則返回Falsexnotins如果x是序列s的元素,返回False,否則返回Trues+t連接兩個(gè)序列s和ts*n或n*s將序列s復(fù)制n次s[i]索引,返回s中的第i個(gè)元素,i是序列的序號(hào)s[i:j]或s[i:j:k]切片,返回序列s中第i到j(luò)以k為步長(zhǎng)的元素子序列l(wèi)en(s)返回序列s的長(zhǎng)度序列類(lèi)型的通用操作符和函數(shù)(共11個(gè))操作符描述min(s)返回序列s的最小元素,s中元素需要可比較max(s)返回序列s的最大元素,s中元素需要可比較s.index(x)或s.index(x,i,j)返回序列s從i開(kāi)始到j(luò)位置中第一次出現(xiàn)元素x的位置s.count(x)返回序列s中出現(xiàn)x的總次數(shù)reversed(s)返回序列s逆序排列后的迭代器sorted(s,key,reverse)返回可迭代對(duì)象iter排序后的列表,key用來(lái)指定排序的規(guī)則,reverse用來(lái)指定順序還是逆序排列enumerate(s[,start])返回一個(gè)enumerate對(duì)象,是一個(gè)迭代器,該迭代器的元素是由參數(shù)s元素的索引和值組成的元組zip(s1[,s2[…]])返回一個(gè)zip對(duì)象,是一個(gè)迭代器,該迭代器的第n個(gè)元素是由每個(gè)可迭代對(duì)象的第n個(gè)元素組成的元組列表1.列表類(lèi)型定義格式如下:ls=["cat","dog","tiger",1024]#用中括號(hào)([])表示print(ls)#輸出['cat','dog','tiger',1024]ll=list((1,2,["cat","dog","tiger",1024]))#用list()函數(shù)將元組或字符串轉(zhuǎn)換成列表print(ll)#輸出[1,2,['cat','dog','tiger',1024]]lt=["monkey","snake",ls]#列表中的元素也可以是列表print(lt)#輸出['monkey','snake',['cat','dog','tiger',1024]]列表類(lèi)型的操作函數(shù)或方法函數(shù)或方法ls[i]=x描述替換列表ls第i元素為xls[i:j:k]=lt用列表lt替換ls切片后所對(duì)應(yīng)元素子列表dells[i]刪除列表ls中第i元素dells[i:j:k]刪除列表ls中第i到第j以k為步長(zhǎng)的元素ls+=lt更新列表ls,將列表lt元素增加到列表ls中l(wèi)s*=n更新列表ls,其元素重復(fù)n次ls.append(x)在列表ls最后增加一個(gè)元素xls.clear()刪除列表ls中所有元素列表類(lèi)型的操作函數(shù)或方法函數(shù)或方法描述ls.copy()生成一個(gè)新列表,賦值ls中所有元素ls.insert(i,x)在列表ls的第i位置增加元素xls.pop(i)將列表ls中第i位置元素取出并刪除該元素ls.remove(x)將列表ls中出現(xiàn)的第一個(gè)元素x刪除ls.reverse()將列表ls中的元素反轉(zhuǎn)ls.count()返回x在列表中出現(xiàn)的次數(shù)ls.extend(t)將可迭代對(duì)象t的每個(gè)元素添加到列表尾部ls.index(x,i,j)返回對(duì)象x在列表中的索引值,索引值范圍在[i,j]之間ls.sorted(key=None,reverse=False)將列表排序元組元組類(lèi)型的操作函數(shù)或方法元組繼承了序列類(lèi)型的全部通用操作。元組因?yàn)閯?chuàng)建后不能修改,因此沒(méi)有特殊操作。creature="cat","dog","tiger","human"#生成元組只需要使用逗號(hào)將元素隔離開(kāi)即可print(creature)#輸出('cat','dog','tiger','human')color=(0x001100,"blue",creature)#一個(gè)元組可以作為另一個(gè)元組的元素,可以采用多級(jí)索引獲取信息print(color)#輸出(4352,'blue',('cat','dog','tiger','human'))元組是包含0個(gè)或多個(gè)數(shù)據(jù)項(xiàng)的不可變序列類(lèi)型。元組類(lèi)型定義格式如下:元組元組類(lèi)型在表達(dá)固定數(shù)據(jù)項(xiàng)、函數(shù)多返回值、多變量同步賦值、循環(huán)遍歷等情況下十分有用。deffunc(x):#函數(shù)多返回值returnx,x**3a,b='dog','tiger'#多變量同步賦值a,b=(b,a)forx,yin((1,0),(2,5),(3,8)):print(x+y)集合集合類(lèi)型與數(shù)學(xué)中的集合概念一致,集合元素之間無(wú)序,每個(gè)元素唯一,不存在相同元素。當(dāng)在聚集中一個(gè)對(duì)象的存在比其順序或者出現(xiàn)的次數(shù)重要時(shí)使用集合。A={"python",123,("python",123)} #使用{}建立集合print(A)#輸出{('python',123),123,'python'}B=set("pypy123")#使用set()建立集合print(B)#輸出{'1','3','y','p','2'}C={"python", 123,"python",123}print(C)#輸出{123,'python'}集合類(lèi)型的操作函數(shù)或方法操作函數(shù)或方法描述in返回True/False,判斷是否是集合的成員notin返回True/False,判斷是否不是集合的成員==判斷集合是否相等!=判斷集合是否不相等S<=T或S<T返回True/False,判斷S和T的子集關(guān)系S>=T或S>T返回True/False,判斷S和T的超集關(guān)系S|T返回集合S和T的合集S-T返回S和T中的補(bǔ)集S&T返回集合S和T的交集S^T返回一個(gè)新集合,包括集合S和T中的非相同元素S<=T或S<T返回True/False,判斷S和T的子集關(guān)系S>=T或S>T返回True/False,判斷S和T的超集關(guān)系集合類(lèi)型的操作函數(shù)或方法操作函數(shù)或方法描述s.add(x)如果x不在集合s中,將x增加到ss.discard(x)移除s中元素x,如果x不在集合s中,不報(bào)錯(cuò)s.remove(x)移除s中元素x,如果x不在集合s中,產(chǎn)生keyerror異常s.clear()移除s中所有元素s.pop()隨機(jī)返回s的一個(gè)元素,更新s,若s為空產(chǎn)生keyerror異常s.copy()返回集合s的一個(gè)副本len(s)返回集合s的元素個(gè)數(shù)xins判斷s中元素x,x在集合s中,返回true,否則返回falsexnotins判斷s中元素x,x不在集合s中,返回false,否則返回trueset(x)將其他類(lèi)型變量x轉(zhuǎn)變?yōu)榧项?lèi)型字典字典類(lèi)似于你通過(guò)聯(lián)系人名字查找地址和聯(lián)系人詳細(xì)情況的地址簿,即,我們把鍵(名字)和值(詳細(xì)情況)聯(lián)系在一起。字典類(lèi)型的定義格式如下:Dcountry={"中國(guó)":"北京","美國(guó)":"華盛頓","法國(guó)":"巴黎"}#用大括號(hào)直接創(chuàng)建字典print(Dcountry)#輸出{'中國(guó)':'北京','美國(guó)':'華盛頓','法國(guó)':'巴黎'}DP={}#使用大括號(hào){}創(chuàng)建一個(gè)空的字典print(DP)#輸出{}info=[(‘Lily’,3000),(‘Maya’,4000),(‘Ada’,5000)]dinfo=dict(info)#用dict()函數(shù)創(chuàng)建字典類(lèi)型的操作函數(shù)或方法函數(shù)或方法描述deld[k]刪除字典d中鍵k對(duì)應(yīng)的數(shù)據(jù)值kind判斷鍵k是否在字典d中,如果在返回True,否則Falsed.keys()返回字典d中所有的鍵信息d.values()返回字典d中所有的值信息d.items()返回字典d中所有的鍵值對(duì)信息d.copy()返回字典d的副本字典類(lèi)型的操作函數(shù)或方法函數(shù)或方法描述d.get(k,<default>)鍵k存在,則返回相應(yīng)值,不在則返回<default>值d.pop(k,<default>)鍵k存在,則取出相應(yīng)值,不在則返回<default>值d.popitem()隨機(jī)從字典d中取出一個(gè)鍵值對(duì),以元組形式返回d.clear()刪除所有的鍵值對(duì)d.update(d2)將d2的鍵值對(duì)添加到d中,如果鍵是已經(jīng)存在的,則更新鍵對(duì)應(yīng)的值len(d)返回字典d中元素的個(gè)數(shù)1.1Python3的安裝與開(kāi)發(fā)環(huán)境配置1.2Python3的基礎(chǔ)1.3Python序列應(yīng)用1.4Python中的函數(shù)1.5模塊1.6面向?qū)ο?.7文件和異常1.8迭代器與生成器函數(shù)的定義和調(diào)用函數(shù)的定義def
<函數(shù)名>(<參數(shù)列表(0個(gè)或多個(gè))>):
<函數(shù)體>return <返回值列表>2.函數(shù)的調(diào)用
函數(shù)調(diào)用和執(zhí)行的一般形式如下:<函數(shù)名>(<參數(shù)列表>)defsayHello():print('HelloWorld!')#blockbelongingtothefunction#EndoffunctionsayHello()#callthefunctionsayHello()#callthefunctionagain函數(shù)的定義和調(diào)用函數(shù)的參數(shù)函數(shù)調(diào)用時(shí),實(shí)參默認(rèn)采用按照位置順序的方式傳遞給函數(shù)。假設(shè)func()函數(shù)有6個(gè)參數(shù),它的定義如下,其中參數(shù)分別表示兩組三維坐標(biāo)值。deffunc(x1,y1,z1,x2,y2,z2):returnresult=func(1,2,3,4,5,6)result=func(x2=4,y2=5,z2=6,x1=1,y1=2,z2=3)函數(shù)的缺省參數(shù)(參數(shù)默認(rèn)值)具有默認(rèn)值的參數(shù)就是缺省參數(shù)。在函數(shù)定義的形參名后使用賦值語(yǔ)句可以給形參指定默認(rèn)參數(shù)值。defprintinfo(name,age=35):"打印任何傳入的字符串"print("名字:",name)print("年齡:",age)return#調(diào)用printinfo函數(shù)printinfo(age=50,name="lily")print("------------------------")printinfo(name="lily")函數(shù)的缺省參數(shù)(參數(shù)默認(rèn)值)默認(rèn)值只會(huì)解析一次。當(dāng)默認(rèn)值是一個(gè)可變對(duì)象,諸如列表、字典或大部分類(lèi)實(shí)例時(shí),會(huì)產(chǎn)生一些差異。deff(a,L=[]):L.append(a)return(L)print(f(1))print(f(2))print(f(3))deff(a,L=None):ifLisNone:L=[]L.append(a)return(L)函數(shù)的可變參數(shù)在函數(shù)定義時(shí),可以讓函數(shù)的參數(shù)個(gè)數(shù)可變。deffact(n,*b):s=1foriteminb:s*=itemreturnsprint(fact(10,3,5,8))變量的作用域全局變量和局部變量x=50#x是全局變量deffunc(x):print('xis',x)x=2#這個(gè)x是在函數(shù)內(nèi)新生成的局部變量,不是全局變量print('Changedlocalxto',x)func(x)#print('xisstill',x)#測(cè)試一下全局變量x是否改變global語(yǔ)句使用global語(yǔ)句指定全局變量x=50deffunc():globalx#global語(yǔ)句被用來(lái)聲明x是全局的print('xis',x)x=2print('Changedglobalxto',x)func()print('Valueofxis',x)global語(yǔ)句當(dāng)全局變量不是整數(shù),而且列表類(lèi)型,結(jié)果會(huì)和前面的不一樣ls=["F","f"]#通過(guò)使用[]真實(shí)創(chuàng)建了一個(gè)全局變量列表lsdeffunc(a) :ls.append(a)#此處ls是列表類(lèi)型,未真實(shí)創(chuàng)建,則等同于全局變量returnfunc("C")#全局變量ls被修改print(ls)#測(cè)試一下ls值是否改變ls=["F","f"]#通過(guò)使用[]真實(shí)創(chuàng)建了一個(gè)全局變量列表lsdeffunc(a):
ls=[]#此處ls是列表類(lèi)型,真實(shí)創(chuàng)建,ls是局部變量ls.append(a)returnfunc("C")#局部變量ls被修改print(ls)局部變量和全局變量(1)簡(jiǎn)單數(shù)據(jù)類(lèi)型變量無(wú)論是否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和使用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變。(2)簡(jiǎn)單數(shù)據(jù)類(lèi)型變量在用global保留字聲明后,作為全局變量使用,函數(shù)退出后該變量保留且值被函數(shù)改變。局部變量和全局變量(3)對(duì)于組合數(shù)據(jù)類(lèi)型的全局變量,如果在函數(shù)內(nèi)部沒(méi)有被真實(shí)創(chuàng)建的同名變量,則函數(shù)內(nèi)部可以直接使用并修改全局變量的值。(4)如果函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類(lèi)型變量,無(wú)論是否有同名全局變量,函數(shù)僅對(duì)局部變量進(jìn)行操作,函數(shù)退出后局部變量被釋放,全局變量值不變。非局部語(yǔ)句deffunc_outer():msg="Outside!"definside():print(msg)inside()print(msg)func_outer()deffunc_outer():msg="Outside!"definside():msg="Inside"print(msg)inside()print(msg)func_outer()deffunc_outer():msg="Outside!"definside():nonlocalmsgmsg="Inside"print(msg)inside()print(msg)func_outer()lambda函數(shù)lambda函數(shù)又稱(chēng)匿名函數(shù),是指一類(lèi)無(wú)需定義函數(shù)名的函數(shù)。匿名函數(shù)并不是沒(méi)有名字,而是將函數(shù)名作為函數(shù)結(jié)果返回,語(yǔ)法格式如下:<函數(shù)名>=lambda<參數(shù)列表>:<表達(dá)式>lambda函數(shù)與正常函數(shù)一樣,等價(jià)于下面形式:def<函數(shù)名>(<參數(shù)列表>):
return<表達(dá)式>lambda函數(shù)1、將lambda函數(shù)賦值給一個(gè)變量,通過(guò)這個(gè)變量間接調(diào)用該lambda函數(shù)。sum=lambdaarg1,arg2:arg1+arg2#調(diào)用sum函數(shù)print("相加后的值為:",sum(10,20))#輸出“相加后的值為:30”print("相加后的值為:",sum(20,20))#輸出“相加后的值為:40”lambda函數(shù)2、將lambda函數(shù)賦值給其他函數(shù),從而將其他函數(shù)用該lambda函數(shù)替換。importtime#為了把標(biāo)準(zhǔn)庫(kù)time中的函數(shù)sleep的功能屏蔽(Mock),我們可以在程序初始化時(shí)調(diào)用:time.sleep=lambdax:None#這樣,在后續(xù)代碼中調(diào)用time庫(kù)的sleep函數(shù)將不會(huì)執(zhí)行原有的功能。#例如:time.sleep(3) #程序不會(huì)休眠3秒鐘,而是因?yàn)閘ambda輸出為None,所以這里結(jié)果是什么都不做lambda函數(shù)將lambda函數(shù)作為參數(shù)傳遞給其他函數(shù)比如說(shuō)結(jié)合map、filter、sorted、reduce等一些Python內(nèi)置函數(shù)使用.#計(jì)算平方數(shù),lambda寫(xiě)法squares=map(lambdax:x**2,[1,2,3,4,5])print(list(squares))#輸出[1,4,9,16,25]#過(guò)濾出列表中的所有偶數(shù)f=filter(lambdax:x%2==0,[1,2,3,4,5,6])print(list(f))#輸出[2,4,6]1.1Python3的安裝與開(kāi)發(fā)環(huán)境配置1.2Python3的基礎(chǔ)1.3Python序列應(yīng)用1.4Python中的函數(shù)1.5模塊1.6面向?qū)ο?.7文件和異常1.8迭代器與生成器創(chuàng)建自己的模塊Python創(chuàng)建自己的模塊很方便,所有的.py文件都被視為是一個(gè)模塊。例如,如果我們?cè)谝粋€(gè)modulel.py的文件中輸入def語(yǔ)句,我們就生成了有一個(gè)屬性的模塊一名字printer,它恰好是對(duì)一個(gè)函數(shù)對(duì)象的引用:defprinter(x):#模塊屬性print(x)載入模塊(1)import語(yǔ)句想使用Python源文件,只需在另一個(gè)源文件里執(zhí)行import語(yǔ)句,語(yǔ)法如下:importmodule1[,module2[,...moduleN],實(shí)例如下:importmodule#得到模塊module.printer("Helloworld"!)#限定性取得名字(模塊.名字)載入模塊(2)from…import語(yǔ)句Python的from語(yǔ)句讓你從模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中,語(yǔ)法如下:frommodnameimportname1[,name2[,...nameN]]。實(shí)例如下:frommoduleimportprinter##得到一個(gè)輸出printer("Helloworld"!)#不需要限定名載入模塊(3)from…import*語(yǔ)句把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間也是可行的,只需使用如下聲明:frommodnameimport*,實(shí)例如下:frommoduleimport*#得到所有輸出printer("Helloworld"!)#不需要限定名模塊的__name__每個(gè)模塊都有一個(gè)名稱(chēng),在模塊中可以通過(guò)語(yǔ)句來(lái)找出模塊的名稱(chēng)。當(dāng)我們只想在程序本身被使用的時(shí)候運(yùn)行主塊,而在它被別的模塊輸入的時(shí)候不運(yùn)行主塊,我們可以通過(guò)模塊的__name__屬性完成。實(shí)例如下:if__name__=='__main__':print('Thisprogramisbeingrunbyitself')else:print('Iambeingimportedfromanothermodule')>pythonusing_name.pyThisprogramisbeingrunbyitself>python>>>importusing_nameIambeingimportedfromanothermoduledir()函數(shù)我們使用內(nèi)建的dir()函數(shù)來(lái)列出模塊定義的標(biāo)識(shí)符。標(biāo)識(shí)符有函數(shù)、類(lèi)和變量。importsysprint(dir(sys))['__breakpointhook__','__displayhook__','__doc__','__excepthook__','__interactivehook__','__loader__','__name__','__package__','__spec__','__stderr__','__stdin__','__stdout__','_base_executable','_clear_type_cache','_current_frames','_debugmallocstats','_enablelegacywindowsfsencoding','_framework','_getframe','_git','_home','_xoptions','api_version','argv','base_exec_prefix','base_prefix','breakpointhook','builtin_module_names','byteorder','call_tracing','callstats','copyright','displayhook','dllhandle','dont_write_bytecode','exc_info','excepthook','exec_prefix','executable','exit','flags','float_info','float_repr_style','get_asyncgen_hooks','get_coroutine_origin_tracking_depth','get_coroutine_wrapper','getallocatedblocks','getcheckinterval','getdefaultencoding','getfilesystemencodeerrors','getfilesystemencoding','getprofile','getrecursionlimit','getrefcount','getsizeof','getswitchinterval','gettrace','getwindowsversion','hash_info','hexversion','implementation','int_info','intern','is_finalizing','maxsize','maxunicode','meta_path','modules','path','path_hooks','path_importer_cache','platform','prefix','set_asyncgen_hooks','set_coroutine_origin_tracking_depth','set_coroutine_wrapper','setcheckinterval','setprofile','setrecursionlimit','setswitchinterval','settrace','stderr','stdin','stdout','thread_info','version','version_info','warnoptions','winver']包包是模塊的文件夾,它定義了一個(gè)由模塊及子包,和子包下的子包等組成的Python的應(yīng)用環(huán)境,它必須有一個(gè)特殊的__init__.py文件,該文件的內(nèi)容可以為空。__init__.py用于標(biāo)識(shí)當(dāng)前文件夾是一個(gè)包。-<somefolderpresentinthesys.path>/-world/-__init__.py-asia/-__init__.py-india/-__init__.py-foo.py-africa/-__init__.py-madagascar/-__init__.py-bar.py1.1Python3的安裝與開(kāi)發(fā)環(huán)境配置1.2Python3的基礎(chǔ)1.3Python序列應(yīng)用1.4Python中的函數(shù)1.5模塊1.6面向?qū)ο?.7文件和異常1.8迭代器與生成器面向?qū)ο蠹夹g(shù)簡(jiǎn)介類(lèi)(Class):用來(lái)描述具有相同的屬性和方法的對(duì)象的集合。它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法。對(duì)象是類(lèi)的實(shí)例。方法:類(lèi)中定義的函數(shù)。包括普通方法、靜態(tài)方法和類(lèi)方法。三種方法在內(nèi)存中都?xì)w屬于類(lèi),區(qū)別在于調(diào)用方式不同。類(lèi)變量:類(lèi)變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類(lèi)變量定義在類(lèi)中且在函數(shù)體之外。類(lèi)變量通常不作為實(shí)例變量使用。數(shù)據(jù)成員:類(lèi)變量或者實(shí)例變量用于處理類(lèi)及其實(shí)例對(duì)象的相關(guān)的數(shù)據(jù)。面向?qū)ο蠹夹g(shù)簡(jiǎn)介方法重寫(xiě):如果從父類(lèi)繼承的方法不能滿(mǎn)足子類(lèi)的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(override),也稱(chēng)為方法的重寫(xiě)。局部變量:定義在方法中的變量,只作用于當(dāng)前實(shí)例的類(lèi)。實(shí)例變量:在類(lèi)的聲明中,屬性是用變量來(lái)表示的,這種變量就稱(chēng)為實(shí)例變量,實(shí)例變量就是一個(gè)用self修飾的變量。面向?qū)ο蠹夹g(shù)簡(jiǎn)介繼承:即一個(gè)派生類(lèi)(derivedclass)繼承基類(lèi)(baseclass)的字段和方法。繼承也允許把一個(gè)派生類(lèi)的對(duì)象作為一個(gè)基類(lèi)對(duì)象對(duì)待。實(shí)例化:創(chuàng)建一個(gè)類(lèi)的實(shí)例,類(lèi)的具體對(duì)象。對(duì)象:通過(guò)類(lèi)定義的數(shù)據(jù)結(jié)構(gòu)實(shí)例。對(duì)象包括兩個(gè)數(shù)據(jù)成員(類(lèi)變量和實(shí)例變量)和方法。self類(lèi)的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱(chēng),但是在調(diào)用這個(gè)方法的時(shí)候你不為這個(gè)參數(shù)賦值,Python會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身,按照慣例它的名稱(chēng)是self。
類(lèi)類(lèi)的定義:使用class語(yǔ)句來(lái)創(chuàng)建一個(gè)類(lèi)并賦給它一個(gè)名字,class之后為類(lèi)的名稱(chēng)并以冒號(hào)結(jié)尾。實(shí)例化對(duì)象:像調(diào)用一個(gè)函數(shù)一樣調(diào)用類(lèi)就生成了一個(gè)新的實(shí)例對(duì)象_init__方法:__init__方法用來(lái)在類(lèi)的一個(gè)對(duì)象被建立時(shí)把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫(xiě)進(jìn)去。注意,特殊方法“__init__”的開(kāi)始和結(jié)尾都是雙下劃線(xiàn)。
類(lèi)classFirstClass:#定義一個(gè)類(lèi)對(duì)象def__init__(self,data):#定義__init__方法self.data=data#self就是實(shí)例defdisplay(self):#定義類(lèi)方法print(self.data)#self.data:每個(gè)實(shí)例的數(shù)據(jù)x=FirstClass("lily")#生成兩個(gè)實(shí)例y=FirstClass(3.14159)#每一個(gè)是一個(gè)新的名字空間x.display()y.display()類(lèi)的繼承classSchoolMember:'''Representsanyschoolmember.'''def__init__(self,name,age):=nameself.age=ageprint('(InitializeSchoolMember:{0})'.format())deftell(self):'''Tellmydetails.'''print('Name:"{0}"Age:"{1}"'.format(,self.age),end='')classTeacher(SchoolMember):'''Representsateacher.'''def__init__(self,name,age,salary):SchoolMember.__init__(self,name,age)self.salary=salaryprint('(InitializedTeacher:{0})'.format())deftell(self):SchoolMember.tell(self)print('Salary:"{0:d}"'.format(self.salary))類(lèi)的繼承classStudent(SchoolMember):'''Representsastudent.'''def__init__(self,name,age,marks):SchoolMember.__init__(self,name,age)self.marks=marksprint('(InitializedStudent:{0})'.format())deftell(self):SchoolMember.tell(self)print('Marks:"{0:d}"'.format(self.marks))t=Teacher('Mrs.Shrividya',40,30000)s=Student('Swaroop',22,75)print#printsablanklinemembers=[t,s]formemberinmembers:member.tell()#worksforbothTeachersandStudents
文件和異常poem='''\ProgrammingisfunWhentheworkisdoneifyouwannamakeyourworkalsofun:usePython!'''f=open('poem.txt','w')#以‘寫(xiě)’的方式打開(kāi)f.write(poem)#把文本寫(xiě)入文件f.close()#關(guān)閉文件f=open('poem.txt')#如果未指定模式,則默認(rèn)為只讀模式whileTrue:line=f.readline()iflen(line)==0:#表示EOFbreakprint(line,end='')#注意逗號(hào),以避免Python自動(dòng)添加換行符f.close()#關(guān)閉文件文件的打開(kāi)模式
文件的打開(kāi)模式描述'r'只讀模式,默認(rèn)值,如果文件不存在,返回FileNotFou
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物買(mǎi)賣(mài)合同范文
- 上海市技術(shù)開(kāi)發(fā)合同范本
- 豬場(chǎng)租賃合同中二零二五年消毒室改造條款
- 公司租車(chē)協(xié)議合同標(biāo)準(zhǔn)文本
- 班級(jí)環(huán)?;顒?dòng)的實(shí)踐方案計(jì)劃
- 公司退伙合同標(biāo)準(zhǔn)文本
- 2025新版高級(jí)經(jīng)理聘請(qǐng)合同書(shū)
- 軍工電源采購(gòu)合同標(biāo)準(zhǔn)文本
- 2025年農(nóng)村商鋪?zhàn)赓U合同協(xié)議
- 傳授廚藝合同標(biāo)準(zhǔn)文本
- 2023年江蘇省交通技師學(xué)院招聘教師考試真題及答案
- 40篇短文搞定高中英語(yǔ)3500單詞
- 人大代表履職基礎(chǔ)知識(shí)講座
- 土壤含水量的測(cè)定實(shí)驗(yàn)報(bào)告三篇
- 經(jīng)典成語(yǔ)故事九色鹿
- 化療相關(guān)味覺(jué)改變量表-(CiTAS)中文版
- 小學(xué)校本課程-13學(xué)無(wú)止境教學(xué)課件設(shè)計(jì)
- 鋼管樁專(zhuān)項(xiàng)施工方案
- 四年級(jí)全冊(cè)《勞動(dòng)》課程知識(shí)點(diǎn)匯總精排
- 《化工原理》說(shuō)課
- 第3課 中古時(shí)期的歐洲
評(píng)論
0/150
提交評(píng)論