繁体   English   中英

在python中定义方法类型的最佳实践

[英]Best Practice for defining method type in python

在python中,不需要指定方法参数类型。 Python动态地解释它们。

但是在一些代码片段中,我看到了定义的类型。

def method(p1: int, p2: int) -> None

1)为什么要这样做2)对于其他数据结构,我只需要定义数据结构,而不定义它接受的参数类型

def multiply(num1: list, num2: list):

为什么这样设计是目的。

以及为什么不允许我定义列表的类型

def multiply(num1: list[int], num2: list[int]):

对于脚本的执行,类型注释是不相关的(它们被解释器丢弃)。

但是对于代码清晰而言,它们通常是一件好事。 您可以立即查看特定函数/方法正在接受或返回的参数类型或返回类型。 此外,IDE(例如PyCharm)通常在您尝试将其他类型传递给带注释的函数时突出显示或发出警告,并且可以更轻松地推断出将带注释的函数的结果分配给的变量的类型。

话虽这么说,因为解释器不关心类型注释,它不会阻止您将错误的参数类型传递给函数(与注释不同)。 例如,当您声明一个函数的返回类型为数字时,也是如此,但是在函数主体中,您返回一个字符串。 IDE可以突出显示它,但是解释器不在乎。

文档

通过将类型分配给别名来定义类型别名。 在此示例中,Vector和List [float]将被视为可互换的同义词:

from typing import List
Vector = List[float]

def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]

# typechecks; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])

因此,关键是您必须from typing import List ,然后才能使用List[int]或所需的任何类型

但是,关于此目的是什么,它可以防止很多人特别是在几个人都在使用代码库并希望使用彼此的功能时所发生的错误。 或是过了一段时间再回到一个项目,什么都不记得了

更多说明:

类型提示仅用于使代码对人眼更具可读性和可理解性。 AFAIK的List或在定义的任何其他类型的typing可能甚至还没有实现的任何逻辑或数据结构。

类型提示对于确保接收到的参数是否如预期的那样非常有用..就像合同或策​​略描述了函数如何处理参数..通常,最常见的情况是使用OOP。

假设您的函数依赖于另一个对象,并且知道该对象包含一个称为foo的方法

 class MyObject:
     def foo():
       print("called")


 def my_method(obj: MyObject):
     obj.foo()

我们正在充满信心地调用foo方法,因为我们只接受从MyObject类实例化的对象,该对象我们肯定知道包含foo方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM