【问题标题】:Python If then Else style when getting values from Dicts从 Dicts 获取值时 Python If then Else 样式
【发布时间】:2012-02-02 14:17:12
【问题描述】:

我经常为以下 if/else 语法而苦恼,我希望有些人可以就他们认为更清楚的内容或这是否违反任何 Pythonisms 给我一些意见(我已经搜索过但无法找到任何东西)。

其中一个更好还是对/错?

value = None
if 'value' in some_dict:
  value = some_dict['value']

some_func(value=value)

或者:

if 'value' in some_dict:
  value = some_dict['value']
else:
  value = None

some_func(value=value)

或者:

some_func(value=some_dict.get('value', None))

我可以看到所有的原因。

【问题讨论】:

    标签: python syntax if-statement


    【解决方案1】:

    当然最后一个是最好的——描述的情况是dict.get的确切情况。

    请注意——get 的第二个参数是多余的,你可以简单地写:

    some_func(value=some_dict.get('value'))
    

    【讨论】:

      【解决方案2】:

      这对我来说看起来最自然:

      value = some_dict.get('value')
      some_func(value=value)
      

      或者:最后一种情况。在我回复时,问题已被编辑。

      【讨论】:

        【解决方案3】:

        在第三个示例中使用字典的get() 方法。那个用例正是它的本来面目。

        【讨论】:

          【解决方案4】:

          这只是风格问题,我会使用最后一个,因为它更简洁(注意您可以省略 None,因为它是默认值)

          顺便说一句,还有这个:

          value = some_dict['value'] if 'value' in some_dict else None
          

          但这正是.get() 所做的事情

          【讨论】:

            【解决方案5】:

            正如其他人所说,dict.get() 方法似乎更适合您的需要。

            但是,如果您不想在字典中没有值的情况下启动该方法,那么一种 Python 方式(根据 EAFP principle)将是:

            try:
               some_func(some_dict['value'])
            except KeyError:
               pass
            

            【讨论】:

              猜你喜欢
              • 2020-02-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多