如何在函数中键入默认列表初始值设定项
How to type default list initializers in functions
我有以下功能
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。)
只需使用Optional[List[int]]
。通过使参数可选,您不会丢失任何东西 - 您在函数体内明确处理 None
- 因此没有理由不使用正确的类型。无论如何,对待空列表和 None
是 Pythonic 的。
正如您提到的,# type: ignore
的问题在于它抑制了对其他参数的类型检查。
我有以下功能
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。)
只需使用Optional[List[int]]
。通过使参数可选,您不会丢失任何东西 - 您在函数体内明确处理 None
- 因此没有理由不使用正确的类型。无论如何,对待空列表和 None
是 Pythonic 的。
正如您提到的,# type: ignore
的问题在于它抑制了对其他参数的类型检查。