代码之家  ›  专栏  ›  技术社区  ›  Pro Q Rich Lysakowski PhD

如何在函数中键入默认列表初始值设定项

  •  2
  • Pro Q Rich Lysakowski PhD  · 技术社区  · 7 年前

    我有以下功能

    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抱怨因为现在我在储存 给一个 List[int] 这是不对的。

    我应该…

    1. 制造 main_list 类型 Optional[List[int]]

    2. 加载项 # type: ignore (这也将从其他工作正常的参数中删除所有类型)

    3. 其他更好的办法来解决这个问题

    (我真的希望答案是3,这就是我问的原因。现在在我的代码中,我选择了选项2。)

    1 回复  |  直到 7 年前
        1
  •  1
  •   mackorone    7 年前

    只是使用 Optional[List[int]] 是的。通过使参数成为可选参数,您不会丢失任何东西—您显式地处理 None 在函数体中-因此没有理由不使用正确的类型。对待空名单和 无论如何都是一样的。

    问题在于 # type: ignore 正如您所提到的,它禁止对其他参数进行类型检查。