歡迎光臨
我們一直在努力

Python指南:高階程式設計技術之過程型程式設計進階

文章摘要: 1.2 生成器表示式與函式 1.3 動態程式碼執行與動態匯入 本文中functions[action](db) 程式碼中
    • 1.2 生成器表示式與函式
    • 1.3 動態程式碼執行與動態匯入

本文中,我們將學習多種不同的程式設計技術,並介紹很多附加的、通常也是更高階的Python 語法。

1、過程型程式設計進階

本節沒有任何新的語法,以之前的內容為基礎給出一種有用的程式設計技術。

1.1 使用字典進行分支

Python 中,函式本身是一種物件,函式名就是對函式的物件引用。如果我們寫一個函式名,其後面沒有小括號,Python 會知道我們是將其當做物件引用。

假設我們要做一個控制檯程式,改程式有幾個選單:

(A)dd (E)dit (L)ist (R)emove (Q)uit

使用者可以輸入 a、e、l、r、q 分別進入各個選單,我們一般的思路是使用 if...else... 語句來實現:

if action == 'a':
    add_dvd(db)
elif action == 'e':
    edit_dvd(db)
elif action == 'l':
    list_dvds(db)
elif action == 'q':
    quit(db)

使用者的選擇存放在變數 action 中。

下面介紹一種簡單的方法,既然函式是 物件 ,那麼就可以放到字典中當做 來對待。

# 使用字典進行分支
functions = dict(a=add_dvd, e=edit_db, l=list_db, q=quit)
functions[action](db)

程式碼中,我們建立了一個字典,其鍵為選單選項,其值為函式引用;第二條語句中,我們取回與給定操作對應的函式引用,並使用呼叫操作符 () 呼叫被引用的函式,並且傳遞引數 db 。使用字典進行分支的程式碼,不僅簡短,而且更容易擴充套件,並且在擴充套件的同時不影響效能。

1.2 生成器表示式與函式

之前介紹過了生成器函式與方法,建立生成器表示式也是可能的。在語法上,這與列表內涵幾乎是一樣的,區別在於: 語句包含在圓括號中 ,而不是方括號中。其語法格式為:

(expression for item in iterable)
(expression for item in iterable if condition)

下面兩個程式碼片段分別展示了通過 yieldfor…in 迴圈實現的生成器:

# 程式碼片段一
def items_in_key_order(d):
    for key in sorted(d):
        yield key, d[key]

# 程式碼片段二
def items_in_key_order(d):
    return ((key, d[key]) for key in sorted(d))

生成器提供了一種執行「惰性」評估的方法,這意味著只有在實際需要的時候才計算值,這比一次性計算一個很大的列表要更加高效。有效的生成器可以生成我們需要數量的值——而沒有上限,比如:

# 沒有上限的生成器
def quarters(next_quart=0.0):
    while True:
        yield next_quart
        next_quart += 0.25

這一函式將返回 0.0、0.25、0.5 … …,以此類推。下面展示如何使用該生成器:

result = []
for x in quarters():
    result.append(x)
    if x > 1.0:
        break

1.3 動態程式碼執行與動態匯入

某些場合中,編寫一段程式碼,並用其生成我們所需要的程式碼,迴避直接編寫所需要的程式碼更簡單。

1.3.1 動態程式碼的執行

未經允許不得轉載:頭條楓林網 » Python指南:高階程式設計技術之過程型程式設計進階