首先,摆脱不必要的括号;他们只是使你的代码更难的结构如下:
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