首先,擺脫不必要的括號;他們只是使你的代碼更難的結構如下:
def b(self):
if self.a() == 'Buy':
return 'BUY SET'
elif self.a() == 'Sell':
return 'SELL SET''
然後刪除雜散'
,導致它提出一個SyntaxError
:
def b(self):
if self.a() == 'Buy':
return 'BUY SET'
elif self.a() == 'Sell':
return 'SELL SET'
下,不叫self.a()
兩次。雖然這是無害的在這裏,在實際的代碼有一個非常好的機會,它就會有副作用,或者至少需要足夠長的時間,你是在浪費時間:
def b(self):
order = self.a()
if order == 'Buy':
return 'BUY SET'
elif order == 'Sell':
return 'SELL SET'
接下來,如果a
回報什麼,但'Buy'
或'Sell'
,你要返回None
。那真的是你想要的嗎?你如何解決這個問題取決於你實際需要什麼。例如,您可能希望:
def b(self):
order = self.a()
if order == 'Buy':
return 'BUY SET'
elif order == 'Sell':
return 'SELL SET'
else:
raise ValueError("Unexpected order type '{}'".format(order))
或許:
def b(self):
order = self.a()
if order == 'Buy':
return 'BUY SET'
else: # We know there's nothing else it could be
return 'SELL SET'
如果有兩個以上的可能性,這可能是值得將東西放入一個dict
,而不是使用if
/elif
鏈,或編寫動態代碼。示例:
def b(self):
return {'Buy': 'BUY SET', 'Sell': 'SELL SET', 'Trade': 'TRADE SET',
'Barter': 'BARTER SET', 'Steal': 'STEAL SET'}[self.a()]
def b(self):
return '{} SET'.format(order.upper())
請注意,這些爲上一個問題做出了不同的選擇。對於未知值,dict
版本將產生KeyError
; format
版本會將任何內容視爲有效。
此外,如果您使用dict
,您可能希望將其移動到b
函數之外,例如,使其成爲類屬性(這也鼓勵您給它一個不錯的名稱)。
但是,只有兩種選擇,我認爲你有什麼更清晰。
最後,給函數無意義的單字母名稱並不是很pythonic;它會更好地做這樣的事情:
def get_formatted_order(self):
order = self.calculate_order()
if order == 'Buy':
return 'BUY SET'
elif order == 'Sell':
return 'SELL SET''
刪除不需要的parens並在比較之前存儲'result = self.a()'(個人偏好)。有一個else子句可能也有用。 – mmgp
我認爲,作爲一個開始,「更優雅/ pythonic」的事情將是使用有意義的名字。 – 2013-01-10 23:58:41