Jes*_*sse 76 python python-typing
我很难从文档中准确理解什么typing.Annotated
是有好处的,并且更难在文档之外找到解释/示例。
或者它“对某事有好处”完全取决于您使用的第三方库吗?您会在什么(现实世界)环境中使用Annotated
?
小智 55
Annotated
python 中允许开发人员声明引用的类型并提供与其相关的附加信息。
name = Annotated[str, "first letter is capital"]
Run Code Online (Sandbox Code Playgroud)
这表明它name
是类型str
并且name[0]
是大写字母。
Annotated
除了将额外信息(元数据)分配给引用之外,其本身不执行任何操作。由另一个代码(可以是库、框架或您自己的代码)来解释元数据并使用它。
例如,FastAPI 用于Annotated
数据验证:
def read_items(q: Annotated[str, Query(max_length=50)])
Run Code Online (Sandbox Code Playgroud)
这里的参数q
是 str 类型,最大长度为 50。此信息使用 Annotated 关键字传递给 FastAPI(或任何其他底层库)。
inn*_*tic 29
简单地说,这是一种表示该x
类型有元数据的方式T
:
Annotated[T, x]
Run Code Online (Sandbox Code Playgroud)
其使用完全取决于您正在使用的库(或您的代码)
最终,如何解释注释(如果有的话)的责任是遇到注释类型的工具或库的责任。
您可以将其用作草莓中的惰性类型检查,因为可以安全地忽略它,如上所述:
如果一个库(或工具)遇到 typehint Annotated[T, x] 并且对元数据 x 没有特殊逻辑,它应该忽略它并简单地将类型视为 T。
或者你可以使用它来更安全地输入,就像在FastAPI中一样
小智 14
FastAPI 0.9.5(昨天发布)添加了对使用Annotated
. 通过文档可以找到其用法的良好示例和解释,例如:
小智 5
就我而言,我将其用于草莓 GraphQL 库中的惰性类型。如果类型之间存在循环依赖关系,那么它非常有用。
示例: https: //strawberry.rocks/docs/types/lazy
oc7o
归档时间: |
|
查看次数: |
41383 次 |
最近记录: |