在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...