在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 ={11:'J',12:'Q',13:'K'}[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分支的实现方式,能够更为一致性的结构和更清晰的实现意图。