Python空Iterable作为默认参数

Python空Iterable作为默认参数,python,default-value,iterable,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...
我知道推荐的模式是:

  def some_method(self,a,b=None):
      b = b or []
      for x in b:
          etc...
但是,对于b非常明确地表示为只读值的方法,为什么不使用它(空元组):


在这种情况下,我觉得更干净。我错了吗?

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

我唯一(挑剔的)反对意见是(至少在我看来)在语义上,元组在理想情况下更像记录(想想datetime结构),而不是同构的值序列


我也同意上面michaelb所说的“空序列”和“无序列”的语义是不同的。

我觉得不错。有没有提到一个消息来源说不要像你所展示的那样去做?我觉得这两个消息的传达方式略有不同
b=None
表示“
b
是可选参数,请执行不同的行为,因为我没有指定
b
”。另一个是,“对这个列表执行预期的行为,它恰好是空的。”我同意你的看法。“特殊情况还不够特殊”。您指定的任何默认值都已经在传递“可选参数”。@JonathonReinhart没有明确说明不。。。但在我读到的所有关于默认列表的内容中,除了我的第二个示例之外,没有人提出过其他建议。
  def some_method(self,a,b=()):
      for x in b:
          etc...