Python空Iterable作为默认参数

时间:2014-10-01 01:15:10

标签: python default-value iterable

在这种方法中,我理解为什么不使用空列表:

  def some_method(self,a,b=[]):
      for x in b:
          etc...

我理解推荐的模式是这样做:

  def some_method(self,a,b=None):
      b = b or []
      for x in b:
          etc...

但是,对于b非常明确地是只读值的方法,为什么不使用它(一个空元组):

  def some_method(self,a,b=()):
      for x in b:
          etc...

在这种情况下,我似乎更清洁。我错了吗?

1 个答案:

答案 0 :(得分:1)

元组技术应该有效,尽管它并不常见。同样值得注意的是,如果你真的没有写信给b,那么把它作为一个列表也不应该伤害你。

我可能会讨论的唯一(挑剔)异议是(在我看来至少)在语义上,元组理想地更像是记录(想想日期时间结构)而不是同构值的序列。

我也同意上面的michaelb那个"空序列的语义"没有什么不同。