學習Python7(流程控制)

迭代鏈表索引

需要迭代鏈表索引的話,如下所示結合使用 range() 和 len():

>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
...     print i, a[i]
...
0 Mary
1 had
2 a
3 little
4 lamb

循環中的else

循環可以有一個 else 子句;它在循環迭代完整個列表 (對於 for) 後或執行條件爲 false (對於 while) 時執行,但循環被 break 中止的情況下不會執行。以下搜索素數的示例程序演示了這個子句:

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print n, 'equals', x, '*', n/x
...             break
...     else:
...         # loop fell through without finding a factor
...         print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
#(Yes, 這是正確的代碼。看仔細: else 語句是屬於 for 循環之中, 不是 if 語句。)

函數參數的默認值

默認值在函數 定義 作用域被解析,如下所示:

i = 5

def f(arg=i):
    print arg

i = 6
f()

將會輸出 5。

重要警告: 默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數類的實例。例如,下面的函數在後續調用過程中會累積(前面)傳給它的參數:

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

這將會打印:

[1]
[1, 2]
[1, 2, 3]

如果你不想在隨後的調用中共享默認值,可以像這樣寫函數:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

使用元組/字典傳遞參數

引入一個形如 **name 的參數時,它接收一個字典(參見 typesmapping ),該字典包含了所有未出現在形式參數列表中的關鍵字參數。這裏可能還會組合使用一個形如 *name (下一小節詳細介紹)的形式參數,它接收一個元組(下一節中會詳細介紹),包含了所有沒有出現在形式參數列表中的參數值。( *name 必須在 **name 之前出現)例如,我們這樣定義一個函數:

def cheeseshop(kind, *arguments, **keywords):
    print "-- Do you have any", kind, "?"
    print "-- I'm sorry, we're all out of", kind
    for arg in arguments:
        print arg
    print "-" * 40
    keys = sorted(keywords.keys())
    for kw in keys:
        print kw, ":", keywords[kw]

它可以像這樣調用:

cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper='Michael Palin',
           client="John Cleese",
           sketch="Cheese Shop Sketch")

當然它會按如下內容打印:

-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章