在Python中,我们都知道从2015年开始提供的Type hints:

def greet(name: str) -> str:
    return "Hello, " + name

我们也知道Function Annotations,特别是这里我指的是文本注释,比如:

def greet(name: "The name of the person to greet") -> str:
    return "Hello, " + name

但是is it possible to use Type Hints 100 with a textual function annotation

例如:

def greet(name: str, "The name of the person to greet") -> str:
    return "Hello, " + name

最后一个会抛出一个错误.

我似乎在PEP或Python文档中找不到任何关于这是否可能的来源.虽然我没有特别深入地搜索,但我仍然希望能找到可能的答案.

推荐答案

正如Samwise所说,类型判断器将无法理解注释是否是类型和描述的元组(或您希望附加的任何其他元数据).PEP 593 – Flexible function and variable annotations个地址正是通过以下地址实现的:

from typing import Annotated

@dataclass
class Description:
    x: str

def greet(name: Annotated[str, Description("The name of the person to greet")]) -> str:
    return "Hello, " + name

我们引入包装类Description的原因是,很明显,编写的字符串是我们使用的描述,因此其他分析注释的库在使用str作为自己的元数据时不会感到困惑.

然后,每typing.Annotated次,您可以使用typing.get_type_hints(name, include_extras=True)在运行时获取描述.

Python相关问答推荐

有什么方法可以避免使用许多if陈述

Pandas 除以一列中出现的每个值

Python在tuple上操作不会通过整个单词匹配

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

运输问题分支定界法&

我如何根据前一个连续数字改变一串数字?

在ubuntu上安装dlib时出错

改进大型数据集的框架性能

调用decorator返回原始函数的输出

启用/禁用shiny 的自动重新加载

为什么if2/if3会提供两种不同的输出?

python中csv. Dictreader. fieldname的类型是什么?'

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

如何根据rame中的列值分别分组值

为什么t sns.barplot图例不显示所有值?'

GPT python SDK引入了大量开销/错误超时

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

python3中np. divide(x,y)和x/y有什么区别?'

将字节序列解码为Unicode字符串

将相应的值从第2列合并到第1列(Pandas )