python如何识别参数的类型?

python如何识别参数的类型?,python,python-3.x,algorithm,jupyter-notebook,Python,Python 3.x,Algorithm,Jupyter Notebook,我想定义一个返回列表中最小元素的函数。 因此,我定义了一个“minOfList”函数,如下所示: def minOfList(a_list): n = len(a_list) x = a_list[0] for i in range(n): if a_list[i] <= x: x = a_list[i] else: x = x return x 然后我将x重新定义为元组,并将x输入函数 x = [1, 1, 5, 6, 9, 5, 4,

我想定义一个返回列表中最小元素的函数。 因此,我定义了一个“minOfList”函数,如下所示:

def minOfList(a_list):
n = len(a_list)
x = a_list[0]
for i in range(n):
    if a_list[i] <= x:
        x = a_list[i]
    else:
        x = x
return x
然后我将x重新定义为元组,并将x输入函数

x = [1, 1, 5, 6, 9, 5, 4, 5]
minOfList(x)
x = (1, 1, 5, 6, 9, 5, 4, 5)
minOfList(x)
无论我将x定义为列表还是元组,该函数都运行良好

问题:
python如何确切地知道将参数的哪种数据类型输入函数?另外,我想知道在定义函数时指定参数数据类型的方法?

Python不使用静态类型转换。所以简单的回答是否定的,Python不知道传递给函数的变量是什么类型的

x = [1, 1, 5, 6, 9, 5, 4, 5]
minOfList(x)
x = (1, 1, 5, 6, 9, 5, 4, 5)
minOfList(x)
但是,有一种方法可以使用isinstance()函数手动检查

x = [1, 1, 5, 6, 9, 5, 4, 5]
minOfList(x)
x = (1, 1, 5, 6, 9, 5, 4, 5)
minOfList(x)
isinstance(您的变量、类型);返回True或False

下面是一个与您正在构建的功能相关的示例

if isinstance(a_list, list) or isinstance(a_list, tuple):
     Your code
else:
     Return bad var type
此外,还有一种方法可以使用以下语法向用户推荐函数期望采用的变量类型:

def minOfList(a_list: list):
     return
这让用户知道他们应该传递什么类型。但是,请注意,这并不强制参数类型-使用仍然可以传入任何变量


希望这有帮助

或者,您可以将装饰器与注释一起使用:

def check_type(f):
    def decorated(*args, **kwargs): 
        for name, t in f.__annotations__.items(): 
            if not isinstance(kwargs[name], t):
                raise TypeError("Incorrect argument type!") 
        return f(*args, **kwargs) 
    return decorated

@check_type # Use it before any function on which you want to check argument type
def foo(bar: str):
    print(bar)

它不知道,它试着看看它是否工作。我想问你是否知道任何其他编程语言,因为yopu似乎没有遵循上面示例中的Python方法。也许您需要首先遵循Python网站上提供的Python教程,因为您的一些问题可能取决于如何使用Python,该教程将向您展示正确的方法Paddy3118 1分钟前edit@Paddy3118不,我现在真的不用其他语言了。正如你所说,我正在阅读关于控制流和定义函数的教程。谢谢。嗨,TaeChoi;如果您正在学习的教程指向您创建上面的代码来遍历列表中的所有项目,那么它可能会起作用,但它们并没有教会您真正的Python技能。您需要寻找另一个更好的教程,教您如何避免获取列表的len(),然后使用for循环中的range显式索引列表项。您可以直接迭代列表中的项目。如果确实需要索引(有一半时间不需要),可以使用enumerate()。标准Python教程和其他许多教程都会这样做。:-)@TaeChoi,你这样探索真是太好了。当遇到更具python风格的解决方案时,可以更容易地进行比较和对比。我希望你对Python有兴趣!正如我所说:-)。哦,你的回答真的帮助了我。谢谢我没有考虑使用isinstance函数。我也不知道我可以向用户推荐函数期望的变量类型。再次感谢。根据原理,您应该避免大量使用is
isinstance
。正如您在上面看到的,您的代码工作正常,无需检查
isinstance
。这被称为,通常用于python@Quickbeam2k1非常正确-但是有时您需要执行手动检查,或者根据变量类型运行不同的代码。我宁愿使用isinstance()而不是try/catch块。非常感谢。我不太理解check_类型的函数和@check_类型的状态,因为我理解得不好。但我希望在搜索这些东西的过程中能学到很多东西。谢谢。搜索python中的装饰器,对我来说非常有用和类似python:)现在搜索如何以及何时使用*args和*kwargs。我现在要找装修工。我发现它们真的很有趣!再次感谢。