首先,去掉不必要的括号;它们只会使代码的结构更难理解:def b(self):
if self.a() == 'Buy':
return 'BUY SET'
elif self.a() == 'Sell':
return 'SELL SET''
然后移除导致其引发SyntaxError的杂散':
^{pr2}$
接下来,不要调用self.a()两次。虽然在这里是无害的,但在实际代码中,它很有可能会产生副作用,或者至少需要足够长的时间来浪费时间:def b(self):
order = self.a()
if order == 'Buy':
return 'BUY SET'
elif order == 'Sell':
return 'SELL SET'
接下来,如果a只返回'Buy'或'Sell',则返回{}。这真的是你想要的吗?如何解决这个问题取决于你实际想要什么。例如,您可能希望: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函数之外—例如,将其作为一个类属性(这也鼓励您给它起一个好名字)。在
不过,只有两个选择,我认为你的选择要清楚得多。在
最后,给函数赋予一个无意义的单字母名称并不是很像Python;最好这样做:def get_formatted_order(self):
order = self.calculate_order()
if order == 'Buy':
return 'BUY SET'
elif order == 'Sell':
return 'SELL SET''