Python入門篇之條件、循環(huán)
1.if語句
Python 中的if子句看起來十分熟悉. 它由三部分組成: 關(guān)鍵字本身, 用于判斷結(jié)果真假的條件表達(dá)式, 以及當(dāng)表達(dá)式為真或者非零時(shí)執(zhí)行的代碼塊.
if 語句的語法如下:
if expression:
expr_true_suite
if 語句的 expr_true_suite代碼塊只有在條件表達(dá)式的結(jié)果的布爾值為真時(shí)才執(zhí)行, 否則將繼續(xù)執(zhí)行緊跟在該代碼塊后面的語句.
(1)多重條件表達(dá)式
單個(gè)if語句可以通過使用布爾操作符and,or和not實(shí)現(xiàn)多重判斷條件或是否定判斷條件.
if not warn and (system_load >= 10):
print "WARNING: losing resources"
warn += 1
(2)單一語句的代碼塊
如果一個(gè)復(fù)合語句(例如 if 子句, while 或 for 循環(huán))的代碼塊僅僅包含一行代碼, 那么它可以和前面的語句寫在同一行上:
if make_hard_copy: send_data_to_printer()
盡管它可能方便, 但這樣會(huì)使得代碼更難閱讀, 所以我們推薦將這行代碼移到下一行并合理地縮進(jìn).
2.else語句
Python提供了與if語句搭配使用的else語句.如果if語句的條件表達(dá)式的結(jié)果布爾值為假,那么程序?qū)?zhí)行else語句后的代碼.它的語法你甚至可以猜到:
if expression:
expr_true_suite
else:
expr_false_suite
if passwd == user.passwd:
ret_str = "password accepted"
id = user.id valid = True
else:
ret_str = "invalid password entered... try again!"
valid = False
3.elif(即else-if)語句
elif是Python的else-if語句,它檢查多個(gè)表達(dá)式是否為真, 并在為真時(shí)執(zhí)行特定代碼塊中的代碼. 和else一樣, elif聲明是可選的, 然而不同的是: if語句后最多只能有一個(gè)else語句, 但可以有任意數(shù)量的elif語句.
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
elif expressionN:
exprN_true_suite
else:
none_of_the_above_suite
4.條件表達(dá)式(即"三元操作符")
Python 2.5 集成的語法確定為: X if C else Y .
>>> x, y = 4, 3
>>> smaller = x if x < y else y
>>> smaller
3
5.while語句
Python的while是本章我們遇到的第一個(gè)循環(huán)語句. 事實(shí)它上是一個(gè)條件循環(huán)語句.與if聲明相比,如果if后的條件為真, 就會(huì)執(zhí)行一次相應(yīng)的代碼塊. 而while中的代碼塊會(huì)一直循環(huán)執(zhí)行, 直到循環(huán)條件不再為真.
while 循環(huán)的語法如下:
while expression:
suite_to_repeat
>>> x=1
>>> while x <=100:
print x
x+=10
6.for語句
Python提供給我們的另一個(gè)循環(huán)機(jī)制就是for語句. 它提供了Python中最強(qiáng)大的循環(huán)結(jié)構(gòu).它可以遍歷序列成員, 可以用在列表解析和生成器表達(dá)式中,它會(huì)自動(dòng)地調(diào)用迭代器的next()方法,捕獲StopIteration異常并結(jié)束循環(huán)(所有這一切都是在內(nèi)部發(fā)生的).和傳統(tǒng)語言中的for語句不同, Python的for更像是 shell 或是腳本語言中的foreach循環(huán).
for循環(huán)會(huì)訪問一個(gè)可迭代對(duì)象(例如序列或是迭代器)中的所有元素, 并在所有條目都處理過后結(jié)束循環(huán).它的語法如下:
for iter_var in iterable:
suite_to_repeat
1.用于序列類型
>>> for c in 'names':
print 'current letter: ', c
current letter: n
current letter: a
current letter: m
current letter: e
current letter: s
迭代序列有三種基本方法:
1.通過序列項(xiàng)迭代:
>>> namelists = ['henry', 'john', 'steven']
>>> for eachName in namelists:
print eachName, 'Lim'
henry Lim
john Lim
steven Lim
2.通過序列索引迭代:
>>> namelists = ['henry', 'john', 'steven']
>>> for nameindex in range(len(namelists)):
print 'Liu, ', namelists[nameindex]
Liu, henry
Liu, john
Liu, steven
3.使用項(xiàng)和索引迭代:
兩全其美的辦法是使用內(nèi)建的 enumerate() 函數(shù), 它是 Python 2.3 的新增內(nèi)容. 代碼如下:
>>> namelists = ['henry', 'john', 'steven']
>>> for i, eachLee in enumerate(namelists):
print "%d %s Lee" % (i+1, eachLee)
1 henry Lee
2 john Lee
3 steven Lee
2.用于迭代器類型
迭代器對(duì)象有一個(gè) next() 方法,調(diào)用后返回下一個(gè)條目. 所有條目迭代完后, 迭代器引發(fā)一個(gè) StopIteration 異常告訴程序循環(huán)結(jié)束. for 語句在內(nèi)部調(diào)用 next() 并捕獲異常.
3.range()內(nèi)建函數(shù)
內(nèi)建函數(shù) range() 可以把類似 foreach 的 for 循環(huán)變成你更加熟悉的語句
Python 提供了兩種不同的方法來調(diào)用range().完整語法要求提供兩個(gè)或三個(gè)整數(shù)參數(shù):
range(start, end, step =1)
range() 會(huì)返回一個(gè)包含所有k的列表,這里start <= k < end ,從start到end, k每次遞增step. step不可以為零,否則將發(fā)生錯(cuò)誤.
>>> range(2, 19, 3)
[2, 5, 8, 11, 14, 17]
如果只給定兩個(gè)參數(shù),而省略step,step就使用默認(rèn)值1.
>>> range(3, 7)
[3, 4, 5, 6]
range() 還有兩種簡略的語法格式:
range(end)
range(start, end)
4.xrange()內(nèi)建函數(shù)
xrange()類似range(),不過當(dāng)你有一個(gè)很大的范圍列表時(shí), xrange()可能更為適合, 因?yàn)樗粫?huì)在內(nèi)存里創(chuàng)建列表的完整拷貝. 它只被用在for循環(huán)中, 在for循環(huán)外使用它沒有意義。同樣地,你可以想到,它的性能遠(yuǎn)高出range(),因?yàn)樗簧烧麄€(gè)列表。
5.與序列相關(guān)的內(nèi)建函數(shù)
sorted(), reversed(), enumerate(), zip()
sorted() 和 zip() 返回一個(gè)序列(列表), 而另外兩個(gè)函數(shù) reversed() 和 enumerate() 返回迭代器(類似序列)
7.break語句
Python中的 break 語句可以結(jié)束當(dāng)前循環(huán)然后跳轉(zhuǎn)到下條語句, 類似 C 中的傳統(tǒng) break.常用在當(dāng)某個(gè)外部條件被觸發(fā)(一般通過if 語句檢查),需要立即從循環(huán)中退出時(shí)break 語句可以用在 while 和 for 循環(huán)中.
8.continue語句
Python里的continue語句和其他高級(jí)語言中的傳統(tǒng)continue并沒有什么不同.它可以被用在while和for循環(huán)里.while循環(huán)是條件性的, 而for循環(huán)是迭代的, 所以continue 在開始下一次循環(huán)前要滿足一些先決條件,否則循環(huán)會(huì)正常結(jié)束.
valid = False
count = 3
while count > 0:
input = raw_input("enter password")
# check for valid passwd
for eachPasswd in passwdList:
if input == eachPasswd:
valid = True
break
if not valid: # (or valid == 0)
print "invalid input"
count -= 1
continue
else:
break
這里例子結(jié)合使用了 while , for , if , break以及 continue ,用來驗(yàn)證用戶輸入. 用戶有三次機(jī)會(huì)來輸入正確的密碼, 如果失敗, 那么 valid變量將仍為一個(gè)布爾假(0 ), 然后我們可以采取必要的操作阻止用戶猜測密碼.
9.pass語句
Python提供了pass語句,它不做任何事情 - 即NOP,(No OPeration ,無操作)我們從匯編語言中借用這個(gè)概念.pass同樣也可作為開發(fā)中的小技巧,標(biāo)記你后來要完成的代碼,例如這樣:
def foo_func():
pass
#或是
if user_choice == 'do_calc':
pass else:
pass
這樣的代碼結(jié)構(gòu)在開發(fā)和調(diào)試時(shí)很有用, 因?yàn)榫帉懘a的時(shí)候你可能要先把結(jié)構(gòu)定下來,但你不希望它干擾其他已經(jīng)完成的代碼. 在不需要它做任何事情地方, 放一個(gè)pass 將是一個(gè)很好的主意.
10.迭代器和iter()函數(shù)
迭代器就是有一個(gè) next() 方法的對(duì)象, 而不是通過索引來計(jì)數(shù). 當(dāng)你或是一個(gè)循環(huán)機(jī)制(例如 for 語句)需要下一個(gè)項(xiàng)時(shí), 調(diào)用迭代器的 next()方法就可以獲得它.條目全部取出后, 會(huì)引發(fā)一個(gè) StopIteration 異常, 這并不表示錯(cuò)誤發(fā)生, 只是告訴外部調(diào)用者, 迭代完成.
限制:不能向后移動(dòng), 不能回到開始, 也不能復(fù)制一個(gè)迭代器.
reversed() 內(nèi)建函數(shù)將返回一個(gè)反序訪問的迭代器. enumerate() 內(nèi)建函數(shù)同樣也返回迭代器. 另外兩個(gè)新的內(nèi)建函數(shù),any()和all()
Python 還提供了一整個(gè)itertools模塊,它包含各種有用的迭代器.
>>> tupe=(12,'2',45.45)
>>> i = iter(tupe)
>>> i.next()
12
>>> i.next()
'2'
>>> i.next()
45.45
>>> i.next()
Traceback (most recent call last):
File "<pyshell#72>", line 1, in <module>
i.next()
StopIteration
創(chuàng)建迭代器
對(duì)一個(gè)對(duì)象調(diào)用 iter() 就可以得到它的迭代器. 它的語法如下:
iter(obj)
iter(func, sentinel )
如果你傳遞一個(gè)參數(shù)給iter(),它會(huì)檢查你傳遞的是不是一個(gè)序列,如果是,那么很簡單:根據(jù)索引從0一直迭代到序列結(jié)束. 另一個(gè)創(chuàng)建迭代器的方法是使用類, 一個(gè)實(shí)現(xiàn)了__iter__()和next()方法的類可以作為迭代器使用.
如果是傳遞兩個(gè)參數(shù)給iter(),它會(huì)重復(fù)地調(diào)用 func ,直到迭代器的下個(gè)值等于sentinel .
11.將某件事作為另一事件導(dǎo)入
從模塊導(dǎo)入函數(shù)的時(shí)候,可以使用
import somemodule
或者
from somemodule import somefunction
或者
from somemodule import somefunction, anotherfunction, yetanotherfunction
或者
from somemodule import *
如果兩個(gè)模塊都有open函數(shù),只需要使用第一種方式導(dǎo)入,然后像下面這樣使用函數(shù):
module1.open(...)
module2.open(...)
或者:可以在語句末尾增加一個(gè)as子句,在該子句后給出名字,或?yàn)檎麄€(gè)模塊提供別名:
>>> import math as foobar
>>> foobar.sqrt(4)
2.0
>>> #也可以為函數(shù)提供別名;
>>> from math import sqrt as foobar
>>> foobar(4)
2.0
這里所做的事情叫做序列解包--將多個(gè)值的序列解開,然后放到變量的序列中,更加形象一點(diǎn)的表達(dá)出來就是:
>>> values=1,2,3
>>> values
(1, 2, 3)
>>> x,y,z=values
>>> x
1
>>> y
2
>>> z
3
相關(guān)文章
細(xì)數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別
今天小編就為大家整理了一篇細(xì)數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python sqlalchemy時(shí)間戳及密碼管理實(shí)現(xiàn)代碼詳解
這篇文章主要介紹了Python sqlalchemy時(shí)間戳及密碼管理實(shí)現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08教你如何將 Sublime 3 打造成 Python/Django IDE開發(fā)利器
Sublime Text 是一款非常強(qiáng)大的文本編輯器, 下面我們介紹如何將 Sublime Text 3 打造成一款 Python/Django 開發(fā)利器:2014-07-07Python實(shí)現(xiàn)Excel和CSV之間的相互轉(zhuǎn)換
通過使用Python編程語言,編寫腳本來自動(dòng)化Excel和CSV之間的轉(zhuǎn)換過程,可以批量處理大量文件,定期更新數(shù)據(jù),并集成轉(zhuǎn)換過程到自動(dòng)化工作流程中,本文將介紹如何使用Python 實(shí)現(xiàn)Excel和CSV之間的相互轉(zhuǎn)換,需要的朋友可以參考下2024-03-03python實(shí)現(xiàn)list元素按關(guān)鍵字相加減的方法示例
這篇文章主要介紹了python實(shí)現(xiàn)list元素按關(guān)鍵字相加減的方法,結(jié)合具體實(shí)例形式分析了Python針對(duì)list元素遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-06-06python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)從pdf文件中提取文本,并自動(dòng)翻譯的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11numpy展平數(shù)組ndarray.flatten()詳解
這篇文章主要介紹了numpy展平數(shù)組ndarray.flatten()詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06