版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章選擇與循環(huán)條件表達式選擇和循環(huán)語句的執(zhí)行離不開對條件的判斷條件表達式算術(shù)運算符:+、-、*、/、//、%、**關(guān)系運算符:>、<、==、<=、>=、!=,可以連續(xù)使用:測試運算符:in、notin、is、isnot邏輯運算符:and、or、not,注意短路求值位運算符:~、&、|、^、<<、>>不要再使用
“不等于”運算符<>Python2支持<>運算符,表示不等于,相當(dāng)于!=而Python3不再支持<>,只有!=運算符“==”vs.運算符“is”“==”測試值的相等性。Python運行相等測試,遞歸地比較所有內(nèi)嵌對象“is”測試對象的一致性。Python測試二者是否是同一對象(即是否在同一內(nèi)存地址中)運算符“==”vs.運算符“is”但是,由于Python內(nèi)部“緩存復(fù)用”小的整數(shù)和字符串以期提高性能,當(dāng)對象是“短”字符串時:這是因為在Python內(nèi)部,暫時存儲并重復(fù)使用短字符串以優(yōu)化性能。實際上內(nèi)存里只有一個字符串“spam”供變量a和變量b分享當(dāng)使用長一些的字符串時,情況就符合預(yù)期:題外話:integercache注意觀察右圖。這是由于Python內(nèi)部緩存部分小值整數(shù)(-5至256范圍內(nèi)),而對更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(比如內(nèi)置的列表、元組,以及用戶定義的類),都沒有這種緩存機制。==測試值的相等性,is運算符測試內(nèi)存中對象的一致性,所以有右圖中的結(jié)果具體請見:/questions/15171695/whats-with-the-integer-cache-inside-pythonTruevs.False在Python中,與大多數(shù)程序設(shè)計語言一樣,整數(shù)0代表假(False),整數(shù)1代表真(True)除此之外,Python也把任意的空數(shù)據(jù)結(jié)構(gòu)視為假,把任意非空的數(shù)據(jù)結(jié)構(gòu)視為真在選擇和循環(huán)結(jié)構(gòu)中,條件表達式的值只要不是False、0(或0.0、0j等)、None、空列表、空元組、空集合、空字典、空字符串、空range對象或其他空迭代對象,Python解釋器均認為與True等價從這個意義上來講,幾乎所有的Python合法表達式都可以作為條件表達式,包括含有函數(shù)調(diào)用的表達式條件表達式>>>if3:#使用整數(shù)作為條件表達式print55>>>a=[1,2,3]>>>ifa:#使用列表作為條件表達式printa [1,2,3]>>>a=[]>>>ifa:printaelse:print'empty'empty短路求值比較特殊的運算符還有邏輯運算符and和or,這兩個運算符具有短路求值或惰性求值的特點,即只計算必須計算的表達式的值以and為例,對于表達式“表達式1and表達式2”而言,如果“表達式1”的值為False或其他等價值,不論“表達式2”的值是什么,整個表達式的值都是False,此時“表達式2”的值無論是什么都不影響整個表達式的值,因此將不會被計算,從而減少不必要的計算和判斷在設(shè)計條件表達式時,當(dāng)表示復(fù)雜條件時如果能夠巧妙利用邏輯運算符and和or的短路求值特性,可以提高程序的運行效率,減少不必要的計算與判斷選擇結(jié)構(gòu)選擇結(jié)構(gòu)通過判斷某些特定條件是否滿足來決定下一步的執(zhí)行流程單分支選擇結(jié)構(gòu)雙分支選擇結(jié)構(gòu)多分枝選擇結(jié)構(gòu)嵌套的選擇結(jié)構(gòu)單分支選擇結(jié)構(gòu)iftest:statement雙分支選擇結(jié)構(gòu)iftest:statement1else:statement2多分支選擇結(jié)構(gòu)iftest1:statement1eliftest2:statement2eliftest3:statement3else:statement4嵌套的選擇結(jié)構(gòu)iftest1:statement1
iftest2: statement2
else: statement3eliftest4:statement4else:statement5雙分支選擇結(jié)構(gòu)的特殊寫法Python還支持如下形式的表達式:當(dāng)條件表達式test的值與True等價時,表達式的值為statement1,否則表達式的值為statement2statement1iftestelsestatement2Python沒有switch語句下面的代碼演示了利用多分支選擇結(jié)構(gòu)將成績從百分制變換到等級制/questions/46701063/why-doesnt-python-have-switch-casedef
score_to_grade(score):
ifscore>
100:
return
'Invalidscore.score>100'
elifscore>=
90:
return
'A'
elifscore>=
80:
return
'B'
elifscore>=
70:
return
'C'
elifscore>=
60:
return
'D'
elifscore>=
0:
return
'E'
else:
return
'Invalidscore.score<0'while循環(huán)與for循環(huán)Python提供了兩種基本的循環(huán)結(jié)構(gòu)語句——while語句、for語句while循環(huán)一般用于循環(huán)次數(shù)難以提前確定的情況,當(dāng)然它也可以用于循環(huán)次數(shù)確定的情況for循環(huán)一般用于循環(huán)次數(shù)可以提前確定的情況,尤其是用于枚舉序列或迭代對象中的元素相同或不同的循環(huán)結(jié)構(gòu)之間都可以互相嵌套,實現(xiàn)更為復(fù)雜的邏輯while循環(huán)whiletest:statementwhile循環(huán)whiletest:statement1else:statement2while循環(huán)在Python中,while循環(huán)和for循環(huán)都可以帶else塊如果循環(huán)因為條件表達式不成立而自然結(jié)束(不是因為執(zhí)行了break語句而結(jié)束),則執(zhí)行else結(jié)構(gòu)中的語句如果循環(huán)是因為執(zhí)行了break語句而導(dǎo)致循環(huán)提前結(jié)束,則不執(zhí)行else中的語句whiletest1:statement1
iftest2:
break
#Exitloopnow,skip"else"below
iftest3:
continue
#Gototopofloopnow,totest1statement2else:statement3#Runifwedidn'thita"break"while循環(huán)和for循環(huán)的else塊只有當(dāng)循環(huán)正常離開時才會被執(zhí)行。換句話說,只有在至始至終沒有觸發(fā)break語句的情況下才會被執(zhí)行while循環(huán)要else有何用?else分句讓你捕捉循環(huán)的“另一條”出路,而不需要設(shè)定和檢查標志位(flag)假設(shè)你要寫一個循環(huán)用于搜索列表的值,而且需要知道在離開循環(huán)后該值是否已經(jīng)被找到found=
Falsewhilexand
notfound:
ifmatch(x[0]):
'gotit!' found=
True
else:x=x[1:]if
notfound:
'notfound!!!'whilex:
ifmatch(x[0]):
'gotit!'
breakx=x[1:]else:
'notfound!!!'循環(huán)結(jié)構(gòu)的優(yōu)化為了優(yōu)化程序以獲得更高的效率和運行速度,在編寫循環(huán)語句時,應(yīng)盡量減少循環(huán)內(nèi)部不必要的計算,將與循環(huán)變量無關(guān)的代碼盡可能地提取到循環(huán)之外對于使用多重循環(huán)嵌套的情況,應(yīng)盡量減少內(nèi)層循環(huán)中不必要的計算,盡可能地向外提break和continue語句break語句在while循環(huán)和for循環(huán)中都可以使用一旦break語句被執(zhí)行,將使整個循環(huán)提前結(jié)束continue語句的作用是終止當(dāng)前循環(huán),并忽略continue之后的語句,然后回到循環(huán)的頂端,提前進入下一次循環(huán)pass語句什么事也不做,只是起占位作用break和continue語句下面的代碼用來計算小于100的最大素數(shù)(素數(shù)是只能被1或者自己整除的自然數(shù)),請注意break語句和else子句的用法輸出:97forninrange(100,
1,
-1):
foriinrange(2,n):
ifn%i==
0:
break
else:
printn
breakbreak和continue語句刪除上面代碼中最后一個break語句,則可以用來輸出100以內(nèi)的所有素數(shù)輸出:9789837973716761595347434137312923191713117532forninrange(100,
1,
-1):
foriinrange(2,n):
ifn%i==
0:
break
else:
printnbreak和continue語句編寫循環(huán)結(jié)構(gòu)代碼時,需要警惕對continue語句執(zhí)行流程考慮不全面所產(chǎn)生的問題例如,為了輸出10以內(nèi)的奇數(shù):左邊代碼的錯誤是:一旦執(zhí)行continue語句,之后的“i+=1”將永遠不再執(zhí)行,使得循環(huán)無法結(jié)束i=
1whilei<
10:
ifi%
2==0:
continue
ii+=1i=
0whilei<
10:i+=1
ifi%
2
==
0:
continue
printi番外:再談“引用”和“拷貝”正如前面講到過的,賦值操作生成對象的引用,而不是這個對象的拷貝在實際應(yīng)用中,“引用”往往就是你想要的(因為這使你可以在程序范圍內(nèi)任意傳遞“大型對象”而不必付出“拷貝”帶來的額外性能開銷)不過,因為賦值操作會產(chǎn)生相同對象的多個引用,你要清楚地意識到在原處修改可變對象時可能會影響程序中其它地方對相同對象的其它引用。例如:如果你不想要“引用”…你就要明確告訴Python:我要對這個象進行‘拷貝’!“拷貝”實際上復(fù)制了該對象,從而避免了對象共享如果你的確需要“拷貝”,明確的說出來:列表的沒有限制條件的分片表達式(L[:])能復(fù)制列表字典、集合對象的copy方法(X.copy())能復(fù)制字典、集合有些內(nèi)置函數(shù)(如list())能生成拷貝(list(L))copy標準庫模塊能夠進行拷貝但是,列表的[:]操作及字典的copy()方法只能做頂層復(fù)制…如果你需要一個深層嵌套的數(shù)據(jù)結(jié)構(gòu)的完整的、完全獨立的拷貝,那么你需要使用copy標準庫模塊:importcopycopied_x=copy.deepcopy(original_x)上述語句能夠遞歸地遍歷對象original_x來復(fù)制其所有的組成部分copy—shallowanddeepcopyoperations/2/library/copy.html/3/library/copy.htmlAssignmentstatementsinPythondonotcopyobjects,theycreatebindingsbetweenatargetandanobject.Forcollectionsthataremutableorcontainmutableitems,acopyissometimesneededsoonecanchangeonecopywithoutchangingtheother.Thismoduleprovidesgenericshallowanddeepcopyoperations:copy.copy(x)Returnashallowcopyofx.copy.deepcopy(x)Returnadeepcopyofx.shallowcopyvs.deepcopyThedifferencebetweenshallowcopyanddeepcopyisonlyrelevantforcompoundobjects(objectsthatcontainotherobjects,likelistsorclassinstances):Ashallowcopyconstructsanewcompoundobjectandthen(totheextentpossible)insertsreferencesintoittotheobjectsfoundintheoriginal.Adeepcopyconstructsanewcompoundobjectandthen,recursively,insertscopiesinto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年外貿(mào)公司員工勞動合同范本含社會保險繳納
- 二零二五年度新材料研發(fā)項目投資合作居間協(xié)議合同范本
- 2025年度軟裝設(shè)計行業(yè)人才培養(yǎng)合同范本2篇
- 二零二五年度總經(jīng)理聘用合同:高端裝備制造業(yè)高層管理人員聘用合同
- 二零二五版農(nóng)村污水處理設(shè)施建設(shè)與運維合同4篇
- 2025年度二零二五年度個人雇傭員工勞動合同(遠程工作)專項范本4篇
- 二零二五版門窗安裝與綠色建筑認證合同7篇
- 2025年山地承包與生態(tài)保護一體化合同4篇
- 2025年度個人租賃合同規(guī)范樣本2篇
- 2025年度個人醫(yī)療貸款合同及費用報銷清單4篇
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 深圳小學(xué)英語單詞表(中英文)
- 護理質(zhì)量反饋內(nèi)容
- 山東省濟寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 抖音搜索用戶分析報告
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 鉆孔灌注樁技術(shù)規(guī)范
- 2023-2024學(xué)年北師大版必修二unit 5 humans and nature lesson 3 Race to the pole 教學(xué)設(shè)計
- 供貨進度計劃
- 國際尿失禁咨詢委員會尿失禁問卷表
- 彌漫大B細胞淋巴瘤護理查房
評論
0/150
提交評論