将函数的签名从 def parsing_tasks(dag_def : DagClass) 更改为仅dag_def,有什么影响?

Changing the signature of a function from def parsing_tasks(dag_def : DagClass), where DagClass is a class to just dag_def, what is the impact?

提问人:Patrick Chong 提问时间:8/29/2023 更新时间:8/29/2023 访问量:21

问:

我有以下类和全局函数:

class DagDefinition: 
    ....
    dag_def...


def parsing_tasks(dag_def: DagDefinition): 
    ....

我不太明白函数参数的语法。我遇到过类似的东西,在函数的参数中使用冒号,比如 ,它告诉我们 的类型是我相信的字符串。dag_def: DagDefinitionvariable:strvariable

还有更多吗?

我问的原因是,在我的代码库中,我想将函数移动到类上方,但要做到这一点,我需要将函数的签名更改为:parsing_tasksDagDefinition

def parsing_tasks(dag_def): 

但是当我这样做并调用一些奇怪的事情时,以前我将一个参数传递给函数并且现在很好,当它期望 1 时,它说 2 个位置参数传递给它。parsing_tasks

重现这个例子是相当困难的,因为它周围有很多代码,但如果有必要,我可以尝试复制它。

首先的问题是,更改上述函数的签名是否会对函数的调用方式产生任何影响。

Python 函数

评论

0赞 Tim Roberts 8/29/2023
这些称为“类型提示”。它们对脚本的执行没有影响。它们仅供 IDE 和其他查找类型问题的语法分析工具使用。有些人虔诚地相信他们。有些人没有。你确定这不是一个需要参数的类方法吗?self
0赞 Diego L 8/29/2023
正如他们之前提到的,它们只是“类型提示”。就我个人而言,我认为将它们包括在内是一个不错的决定。但是,如果您决定包含它们,请记住 FastAPI 使用这些“类型提示”来执行数据验证(实际上它通过 Pydantic 进行验证),因此,如果在 FastAPI 端点上不满足类型提示,您将收到 ValidationError

答:

0赞 Matias B 8/29/2023 #1

它们称为类型提示,从函数签名中删除它们完全不会产生任何影响。正如官方文档所说

Python 运行时不强制执行函数和变量类型注释。它们可以由第三方工具使用,例如类型检查器、IDE、linter 等。

还有许多库利用它们,例如 FastAPI