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

Posted

技术标签:

【中文标题】在 Python 中,是不是可以将函数参数的类型限制为两种可能的类型? [复制]【英文标题】:In Python, is it possible to restrict the type of a function parameter to two possible types? [duplicate]在 Python 中,是否可以将函数参数的类型限制为两种可能的类型? [复制] 【发布时间】:2021-03-06 19:39:12 【问题描述】:

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

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

def f(parameter : [int, list]):
    if len(str(parameter)) <= 3:
        return 3
    else:
        return [1]

if __name__ == '__main__':
    f("weewfwef")

【问题讨论】:

【参考方案1】:

您要查找的术语是union type。

from typing import Union

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

Union 不限于两种类型。如果您曾经有一个值是几种已知类型之一,但您不一定知道是哪一种,您可以使用Union[...] 来封装该信息。

【讨论】:

【参考方案2】:

试试typing.Union

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

【讨论】:

【参考方案3】:

在python中,没有这么严格的类型检查,这就是为什么它遵循鸭子类型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】:
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语句并引发错误

【讨论】:

以上是关于在 Python 中,是不是可以将函数参数的类型限制为两种可能的类型? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

理解python3函数中的“*”“仅限关键字”参数表示法[重复]

TypeScript 中是不是可以将强类型函数作为参数?

TypeScript 中是不是可以将强类型函数作为参数?

python类中可以建立任意多参数吗?

Python:为啥在函数中使用重载而不是 *args(尤其是当参数的类型不影响函数的运行方式时)

python 变量类型 number