Python 在函数中使用空元组作为默认iterable参数

Python 在函数中使用空元组作为默认iterable参数,python,Python,使用空元组作为函数的iterable参数的默认值有什么缺点吗?假设函数中需要的是不可变的iterable。 e、 g 我似乎找不到很多这个用例的例子 我想不出有什么坏处,因为当你需要一个不变的iterable时。我认为它只是没有被使用,因为default\u list=None和default\u list=default\u list或None模式是用于可变iterables的,在iterable不可变的不太频繁的情况下,人们不必费心去更改它(因为没有真正的需要)。对于可变的默认参数,当然不会

使用空元组作为函数的iterable参数的默认值有什么缺点吗?假设函数中需要的是不可变的iterable。 e、 g


我似乎找不到很多这个用例的例子

我想不出有什么坏处,因为当你需要一个不变的iterable时。我认为它只是没有被使用,因为
default\u list=None
default\u list=default\u list或None
模式是用于可变iterables的,在iterable不可变的不太频繁的情况下,人们不必费心去更改它(因为没有真正的需要)。对于可变的默认参数,当然不会出现意外的行为。

将默认值设计为不可变的空元组并没有内在的问题。然而,它可以被认为是一种非直观的设计方法。对元组中特定位置的任何引用都会引发异常。如果您在创建参数检查时足够小心,那么这不会是一个问题,但是如果您构建代码的其余部分以期望来自特定位置的数据,并且没有验证元组是否为空,那么这将导致错误

这取决于你的辩论目标是什么。空列表对于默认参数(至少是那些以某种方式修改列表的参数)有更明显的应用,但是空的不可变元组除了指示没有给出参数之外,没有任何直观的默认用途

默认参数的典型方法是将其设置为“无”,这在未设置参数时非常清楚:

def foo(a, b=None):

函数是否在
for
循环之外执行任何操作?我是否遗漏了什么?使用默认参数的唯一方法是在没有参数的情况下手动调用
foo
,如
foo()
。但是,如果您知道该函数只在iterable为非空时才执行任何操作,那么您为什么要编写它呢?请注意,该函数的所有调用都在默认参数中共享该对象。因此,默认参数中的可变对象可能会被修改并导致错误。我想在这里使用不可变元组是无害的。。。现在,您已经编辑了函数,使其在
for
循环之外执行某些操作,这意味着您对我的问题的回答“否”应该是“是的,我的函数执行for循环以外的操作”。我误解了您的第一个问题,对此表示抱歉。不管怎样,我认为问题的核心是空元组是否作为默认参数工作,而不会产生任何意外的副作用。
def foo(a, b=None):