【问题标题】:Setting defaults for empty arguments (Python)为空参数设置默认值 (Python)
【发布时间】:2018-06-03 04:33:03
【问题描述】:

假设我们有函数 f 并且我需要参数 b 以默认为空列表,但由于可变默认参数的问题而无法设置 b=[]。

其中哪一个是最 Pythonic 的,还是有更好的方法?

def f(a, b=None):
   if not b:
     b = []
   pass

def f(a, b=None):
   b = b or []
   pass

【问题讨论】:

标签: python pep8 default-arguments


【解决方案1】:

第一种形式更容易阅读。在没有任何特定上下文的情况下,您应该显式测试默认值,以避免传入值的潜在真实性问题。

def f(a, b=None):
   if b is None:
     b = []
   pass

来自PEP 8, Programming Recommendations

另外,当你真正的意思是如果 x 不是 None 时,请注意写 if x -- 例如测试默认为无的变量或参数时 被设置为其他值。另一个值可能有一个类型(例如 作为容器)在布尔上下文中可能是错误的!

您可以在整个 cpython 存储库中看到这种方法的示例:

【讨论】:

    【解决方案2】:
    def f(a, b=''):
       if not b:
          b = []
    
       print(a)
    

    你可以做一些简单的事情,比如“if not b”。如果您打算将默认参数设为空字符串或将其设置为 None,您可以简单地使用 if 语句来定义 B 应该是什么,如果您实际上永远不会为 b 输入参数。在此示例中,我们只是将其设置为一个空列表。

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 2013-04-28
      • 1970-01-01
      • 2010-10-28
      • 2018-01-22
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多