【问题标题】:Is it necessary to use an 'if' statement here?是否有必要在这里使用'if'语句?
【发布时间】:2020-03-18 11:16:19
【问题描述】:

Fluent Python 的示例 6-3 定义了一个私有变量 self.__total,并在其赋值之前使用了一个 if 语句,如下所示:

if not hasattr(self, '__total'):            
    self.__total = sum(item.total() for item in self.cart)        
return self.__total

为什么不直接使用语句return self.__total = sum(item.total() for item in self.cart) 进行赋值?

【问题讨论】:

  • 这似乎是一种保护,只计算一次,不修改它或提高性能

标签: python fluent


【解决方案1】:

有区别,做

return self.__total = sum(item.total() for item in self.cart)

覆盖任何以前的值私有变量 total 持有,而

if not hasattr(self, '__total'):            
    self.__total = sum(item.total() for item in self.cart)        
return self.__total

如果之前分配过,将返回之前的值...

【讨论】:

  • 感谢您的回答。我知道你的意思,但为什么不让变量在每次调用类时被覆盖?这是代码:
  • 您可能不想覆盖 total 的值,因为它可能包含一些之前计算的有用信息。即使没有,另一个很好的解释是您可能不想一次又一次地重新计算 total 的值。在这种情况下,这似乎没有必要,但如果您正在执行一些时间复杂的计算,您可能希望返回之前的计算值,而不是再次执行所有这些操作。
猜你喜欢
  • 2019-05-12
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多