【问题标题】:Most pythonic way to refactor multiple equality checks重构多个相等检查的最pythonic方法
【发布时间】:2020-04-26 07:30:32
【问题描述】:

给定一个 if 语句,例如:

if response.status == SUCCESS or \
   response.status == FAILURE or \
   response.status == CLEAR or \
   response.status == READY:

像(1)这样重构会更好:

if any(response.status == status for status in (SUCCESS, FAILURE, CLEAR, READY):

或(2):

if response.status in {SUCCESS, FAILURE, CLEAR, READY}:

我的直觉是 1 更好,因为它更透明(如果不是也更易读的话),但 2 更简洁,避免了遍历元组中的每个项目。

【问题讨论】:

  • 我会使用最后一种方法,因为它更具可读性。

标签: python python-3.x refactoring zen-of-python


【解决方案1】:

您可以像这样使用元组或列表,无需迭代。 (Python3.7)

>>>'SUCCESS' in ('SUCCESS', 'FAILURE', 'CLEAR', 'READY')
True

你的情况

if response.status in (SUCCESS, FAILURE, CLEAR, READY):

【讨论】:

  • 不确定为什么得到-1?至少在做的时候留下理由。
  • 这应该怎么回答?您忽略了他们的要求,而是提供了另一种选择,这与他们的第二种选择几乎相同,您对此没有说任何话(例如,为什么您的可能会更好)。
  • 这是选项 1 的替代方案,它是 pythonic 的方式。如果您提供了示例,则不需要始终进行解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
相关资源
最近更新 更多