处理可选列表参数的常规方法如下:
router.get()
如果以下(更短)的版本有任何陷阱,我会更聪明?为什么没人这样做?它被认为更加模糊吗?
def func(list_of_vals = None):
if list_of_vals is None:
list_of_vals = []
...
答案 0 :(得分:5)
使用None
结合if语句是常见的,它对python开发人员来说很熟悉,没有奇怪的边缘情况。 我的建议只是坚持惯例。
此处使用or
操作的建议在逻辑上与bool(list_of_vals) == False
但list_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)