首先,去掉不必要的括号;它们只会使您的代码结构更难遵循:
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'
or之外的任何内容'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'
如果您有两种以上的可能性,则可能值得将事物放入 adict
而不是使用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
版本只会将任何内容视为有效。
此外,如果您使用 a dict
,您可能希望将其移到b
函数之外——例如,将其设为类属性(这也鼓励您给它起一个好听的名称)。
但是,对于只有两个选择,我认为您所拥有的要清楚得多。
最后,给函数起一个无意义的单字母名称并不是很pythonic;最好做这样的事情:
def get_formatted_order(self):
order = self.calculate_order()
if order == 'Buy':
return 'BUY SET'
elif order == 'Sell':
return 'SELL SET''