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

Ben*_*man 3 python list immutability optional-arguments

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

def func(list_of_vals = None):
   if list_of_vals is None:
      list_of_vals = []
   ...
Run Code Online (Sandbox Code Playgroud)

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

list_of_vals = list_of_vals or []
Run Code Online (Sandbox Code Playgroud)

wim*_*wim 5

None通常使用if语句与python开发人员熟悉并且没有奇怪的边缘情况. 我的建议只是坚持公约.

你or在这里使用操作的建议在逻辑上偏离了边缘情况的传统解决方案,bool(list_of_vals) == False但是list_of_vals is not None,我建议不要使用它.

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

def a(vals=()):
    ...
Run Code Online (Sandbox Code Playgroud)

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

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