Jac*_*k Z 62 python pylint default-value
我有一个Python列表作为参数.如果我将参数的默认值设置为空列表,如下所示:
def func(items=[]):
print items
Run Code Online (Sandbox Code Playgroud)
Pylint会告诉我"危险的默认值[]作为参数".所以我想知道这里的最佳做法是什么?
Sve*_*ach 88
使用None
作为默认值:
def func(items=None):
if items is None:
items = []
print items
Run Code Online (Sandbox Code Playgroud)
可变默认参数的问题在于它将在函数的所有调用之间共享 - 请参阅Python教程相关部分中的 "重要警告" .
我刚刚第一次遇到这个问题,我的想法是"好吧,我不想改变列表,所以我真正想要的是默认为不可变列表,所以如果我不小心Python会给我一个错误改变它." 不可变列表只是一个元组.所以:
def func(items=()): print items
当然,如果你将它传递给真正想要列表的东西(例如isinstance(items,list)),那么这将让你陷入困境.但无论如何这都是代码味道.