我具有以下功能
def foo(main_list = None):
if main_list is None:
main_list = []
# do stuff with main_list
这是common Python paradigm,因为如果您有默认列表,则该列表对于所有默认呼叫均保持不变。因此,您可以通过将其设置为None
,然后将其重置为函数内的实际默认列表来解决该问题。
键入此内容时,我想这样做:
def foo(main_list: List[int] = None):
if main_list is None:
main_list = []
# do stuff with main_list
但是Mypy抱怨,因为现在我将None
存储到不正确的List[int]
中。
我应该...
使main_list
的类型为Optional[List[int]]
添加一个# type: ignore
(这也会删除其他所有可以正常工作的参数的输入)
解决这个问题的其他更好的方法
(我真的希望答案是#3,这就是我要问的原因。现在在我的代码中,我选择了选项#2。)
答案 0 :(得分:1)
只需使用Optional[List[int]]
。通过使参数成为可选参数,您不会丢失任何东西-您在函数体内显式地处理None
-因此,没有理由不使用正确的类型。无论如何,将空列表和None
都一样对待是Pythonic。
如上所述,# type: ignore
的问题在于它会抑制其他参数的类型检查。