2018年6月28日 星期四

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 動態程式碼的執行





http://www.buzzfunnews.com/20180622667.html

心情煩悶需要新鮮事刺激一下嗎?請上:http://www.buzzfunnews.com

沒有留言:

張貼留言