Python 如何在函数中键入默认列表初始值设定项
我有以下功能Python 如何在函数中键入默认列表初始值设定项,python,python-3.x,typing,mypy,Python,Python 3.x,Typing,Mypy,我有以下功能 def foo(主列表=无): 如果主列表为“无”: 主列表=[] #用主列表做一些事情 这是因为如果您有一个默认列表,那么对于所有默认调用,该列表保持不变。因此,您可以通过将其设置为None,然后将其重置为函数中的实际默认列表来解决这个问题 键入此内容时,我希望执行以下操作: def foo(主列表:list[int]=None): 如果主列表为“无”: 主列表=[] #用主列表做一些事情 但是Mypy抱怨,因为现在我正在将None存储到列表[int]中,这是不对的 我应该
def foo(主列表=无):
如果主列表为“无”:
主列表=[]
#用主列表做一些事情
这是因为如果您有一个默认列表,那么对于所有默认调用,该列表保持不变。因此,您可以通过将其设置为None
,然后将其重置为函数中的实际默认列表来解决这个问题
键入此内容时,我希望执行以下操作:
def foo(主列表:list[int]=None):
如果主列表为“无”:
主列表=[]
#用主列表做一些事情
但是Mypy抱怨,因为现在我正在将None
存储到列表[int]
中,这是不对的
我应该
main_列表
为可选类型[list[int]]
#type:ignore
(这也将从其他正常工作的参数中删除所有键入内容)(我真的希望答案是#3,这就是我为什么要问的原因。现在在我的代码中,我选择了选项#2。)只需使用
可选的[List[int]
。通过将参数设置为可选参数,您不会丢失任何东西—您在函数体中显式处理None
—因此没有理由不使用正确的类型。不管怎样,将空列表和None
一视同仁都是一种恶作剧
正如您所提到的,#type:ignore
的问题在于它会抑制其他参数的类型检查