標籤:python 編程 語言
條件陳述式
if都是大家的老朋友了,直接程式碼範例,簡單易上手:
<span style="font-size:18px;">>>> lang = "python">>> if lang == "C":... print "C language"... elif lang == "Java":... print "Java language"... else:... print "Python language"... Python language>>> </span><span style="font-size:14px;"></span>
迴圈語句
while直接上代碼,就是幹
<span style="font-size:18px;">>>> count = 0>>> while(count < 9):... print 'the index is:', count... count += 1... the index is: 0the index is: 1the index is: 2the index is: 3the index is: 4the index is: 5the index is: 6the index is: 7the index is: 8>>> </span><span style="font-size:14px;"></span>
for不解釋,直接上
<span style="font-size:18px;">>>> game = ['LOL', 'GT', 'CSOL']>>> for g in game:... print 'you play %s' % game... you play ['LOL', 'GT', 'CSOL']you play ['LOL', 'GT', 'CSOL']you play ['LOL', 'GT', 'CSOL']>>> for index in range(len(game)):... print 'you play %s' % game[index]... you play LOLyou play GTyou play CSOL>>> </span><span style="font-size:14px;"></span>
break, continue, passbreak: 熟悉C的朋友都熟悉,打破迴圈continue: 跳過後面的語句直接進行下一次迴圈pass:空語句, 就比如C中空的大括弧
while-else, for-else(還是挺方便的)當迴圈和else語句一起使用時(描述不是很準確,看代碼就懂了),迴圈若正常退出,則會運行else中的語句。如何迴圈是通過break語句結束的,那麼else中的語句也將跳過。下面引用書上的代碼:maxFact.py
<span style="font-size:18px;">def showMaxFactor(num): count = num/2 while count > 1: if num % count == 0: print 'largest factor of %d is %d' % (num, count) break; count -= 1 else: print num, 'is prime'for eachNum in range(10,21): showMaxFactor(eachNum)</span><span style="font-size:14px;"></span>
運行結果:
<span style="font-size:18px;">linux-ne7w:~/python> python maxFact.py largest factor of 10 is 511 is primelargest factor of 12 is 613 is primelargest factor of 14 is 7largest factor of 15 is 5largest factor of 16 is 817 is primelargest factor of 18 is 919 is primelargest factor of 20 is 10</span><span style="font-size:14px;"></span>
迭代器迭代器為類序列對象提供了一個類序列的介面。迭代器非常靈活,它可以迭代那些表現出序列行為的對象。例如字典的鍵,一個檔案的所有行等等。
- 為什麼要迭代器:
- 提供了可擴充的迭代器介面
- 對列表迭代提供了效能上的增強
- 在字典迭代中效能提升
- 建立真正的迭代介面,而不是原來的隨機對象訪問
- 與所有已經存在的使用者定義的類以及擴充的類比序列和映射的對象向後相容
- 迭代非序列集合時,可以建立更簡潔可讀的代碼
怎麼迭代:首先可以用iter()函數返回被迭代對象的迭代器,然後調用迭代器的next()方法擷取下一項。當所有項都擷取了,會引發一個StopIteration異常,告訴調用者迭代完成。迭代器是單向通行的,只能向後移動。
使用迭代器:
<span style="font-size:18px;">>>> t = (123, 'text', 66.66)>>> t(123, 'text', 66.66)>>> i = iter(t)>>> i.next()123>>> i.next()'text'>>> i.next()66.66>>> i.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration>>> </span><span style="font-size:14px;"></span>
若在實際應用中,這樣寫實在夠嗆。python實在太智能,在實際的應用中,python會幫你處理。看一個迭代檔案的例子
<span style="font-size:18px;">>>> f = open('text.txt', 'r')>>> for eachLine in f:... print eachLine,... This is just for a testeveryone should learn programming, programming teach you thinking.forget my poor english.haha.</span><span style="font-size:14px;"></span>
for迴圈會自動調用迭代器的next()方法,並處理StopIteration異常。
警告:在迭代可變對象的時候不要修改它,,到時候就boom,程式崩潰了。
列表解析列表解析(List comprehensions)來自於函數式程式設計語言Haskell。它用來動態建立列表。列表解析的文法:[expr for iter_var in iterable]按我的理解(產生列表元素),它等價於:for iter_var in iterable:expr
看幾個例子:
<span style="font-size:18px;">[x ** 2 for x in range(6)][0, 1, 4, 9, 16, 25]>>> seq = [11, 10, 89, 32, 43, 22, 55, 23, 21, 32]>>> [x for x in seq if x % 2][11, 89, 43, 55, 23, 21]</span>
<span style="font-size:18px;">>>> [(x+1,y+1) for x in range(3) for y in range(4)][(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4)]>>> </span><span style="font-size:14px;"></span>
產生器運算式產生器運算式是列表解析的一個擴充。目前還不是很熟悉,就先這樣吧。
Python學習之路——控制語句,迭代器, 列表解析