代码之家  ›  专栏  ›  技术社区  ›  Tom

在Python中,是否可以将函数参数的类型限制为两种可能的类型?

  •  2
  • Tom  · 技术社区  · 5 年前

    我尝试将“parameter”类型限制为int或list,如下面的函数“f”。但是,Pycharm在f行(“weewfwef”)没有显示关于错误参数类型的警告,这意味着(参数:[int,list])不正确。

    在Python中,是否可以将Python函数参数的类型限制为两种可能的类型?

    def f(parameter : [int, list]):
        if len(str(parameter)) <= 3:
            return 3
        else:
            return [1]
    
    if __name__ == '__main__':
        f("weewfwef")
    
    
    4 回复  |  直到 5 年前
        1
  •  4
  •   Silvio Mayolo    5 年前

    你要找的术语是 union type .

    from typing import Union
    
    def f(parameter: Union[int, list]):
      ...
    

    Union 不限于两种类型。如果您有一个值是几种已知类型中的一种,但您不一定知道是哪种类型,那么可以使用 Union[...] 封装这些信息。

        2
  •  1
  •   Wasif    5 年前

    typing.Union

    from typing import Union
    def f(parameter : Union[int,list]):
        if len(str(parameter)) <= 3:
            return 3
        else:
            return [1]
    
        3
  •  0
  •   ssp4all    5 年前

    在python中,没有这样严格的类型检查,这就是为什么它遵循duck类型 https://realpython.com/lessons/duck-typing/

    def f(parameter : [int, list]):
        if not(type(parameter) in [list, int]):
            raise ValueError("Invalid Input type")
        if len(str(parameter)) <= 3:
            return 3
        else:
            return [1]
    
        4
  •  -2
  •   ppwater Azbilegt Chuluunbat    5 年前
    def f(parameter : [int, list]):
        if type(parameter) == (int or list):
            if len(str(parameter)) <= 3:
                return 3
            else:
                return [1]
        else:
            raise ValueError # You can use other error if you want to
    
    if __name__ == '__main__':
        print(f("weewfwef"))
    

    使用 type() 检查其类型并使用if语句并引发错误