使用elif分支代替對映簡化設計

2021-08-03 12:18:56 字數 1444 閱讀 8579

在python的程式設計中,字典這樣的對映程式總是可以用elif結構來代替。通常,這樣可以使得設計獲得更好的一致性。例如,之前有**如下:

#!/usr/bin/python

class card:

def __init__(self,rank,suit):

self.suit = suit

self.rank = rank

self.hard,self.soft =self._points()

classnumbercard(card):

def _points(self):

returnint(self.rank),int(self.rank)

classacecard(card):

def _points(self):

return 1,11

classfacecard(card):

def _points(self):

return 10,10

class suit:

def __init__(self,name,symbol):

self.name = name

self.symbol = symbol

defcard(rank,suit):

if rank == 1:

return acecard('a',suit)

elif 2 <= rank < 11:

return numbercard(str(rank),suit)

elif 11 <= rank < 14:

name =[rank]

return facecard(name,suit)

else:

raise exception("rank out ofrange")

在實現card工廠函式的時候,上面的**中使用了對映。此函式可以進行修改,設計為如下方式:

defcard(rank,suit):

if rank == 1:

return acecard('a',suit)

elif 2 <= rank < 11:

return numbercard(str(rank),suit)

elif rank == 11:

return facecard('j',suit)

elif rank == 12:

return facecard('q',suit)

elif rank == 13:

return facecard('k',suit)

else:

raise exception("rank out ofrange")

通過上面的修改,雖然**長度有所增加,但是**獲得了更好的一致性。相比之下,如果是用於處理簡單的情況,通常使用字典這樣的對映會更為高效地工作也具有更好的可讀性。但是elif分支的實現方式,能夠更為一致性的結構和更清晰的實現意圖。

使用Join代替In

我們知道,在sql中使用in讓我們的where子句可以規定多個值。當需要從乙個集合中查詢包含某幾個值的記錄的時候,通常我們會選擇使用in來實現,其實,使用join也可以實現這樣的功能,而且效能要比in好。我會從以下幾個方面來進行總結。使用in和join的效能對比 ef中如何使用join來代替in 首...

使用exists代替in

select from class a where id in select id from class b select from class a a where exists select from class b b where a.id b.id 分析 上述兩種方法查詢結果一樣,但exist...

使用ThreadPool代替Thread

執行緒的空間開銷 執行緒核心物件。包含上下文資訊。32位系統占用700位元組 執行緒環境塊。包括執行緒的異常處理鏈。32位系統占用4kb 使用者模式棧。儲存方法的引數 區域性變數和返回值 核心模式棧。呼叫作業系統的核心模式函式時,系統會將函式引數從使用者模式棧複製到核心模式棧。32位系統占用12kb...