python中的可选列表参数“list = list或[]”

时间:2016-10-28 21:36:21

标签: python list immutability optional-arguments

处理可选列表参数的常规方法如下:

router.get()

如果以下(更短)的版本有任何陷阱,我会更聪明?为什么没人这样做?它被认为更加模糊吗?

def func(list_of_vals = None):
   if list_of_vals is None:
      list_of_vals = []
   ...

2 个答案:

答案 0 :(得分:5)

使用None结合if语句是常见的,它对python开发人员来说很熟悉,没有奇怪的边缘情况。 我的建议只是坚持惯例

此处使用or操作的建议在逻辑上与bool(list_of_vals) == Falselist_of_vals is not None的边缘情况的传统解决方案不同,因此我建议反对用它。

另一种可能的选择是使用空元组:

def a(vals=()):
    ...

因为元组是不可变的,所以这没有可变默认列表的缺陷。有许多用例只需要迭代和索引输入容器,vals可以很好地保留为元组。

如果你确实需要在函数体内有一个列表,例如你需要追加或弹出项目,那么你将添加vals = list(vals)作为函数的第一行。

答案 1 :(得分:1)

有两种情况,您希望列表可以在函数外部更改,然后第二种变体阻止调用a

some_list = []
a(some_list)
print(some_list)

如果您想阻止更改list参数,您应该在a

中复制
def a(l=()):
    l = list(l)