1
81
我觉得这真的很棒。 从学术背景来看,我可以告诉您,注释对于证明智能静态分析器对于Java这样的语言来说是非常宝贵的。例如,您可以定义语义,如状态限制、允许访问的线程、体系结构限制等,然后有相当多的工具可以读取这些内容并对其进行处理,以提供超出编译器所能提供的保证。你甚至可以写一些检查先决条件/后置条件的东西。 我觉得在python中特别需要这样的东西,因为它的类型比较弱,但是实际上没有任何构造可以使这个简单化并成为官方语法的一部分。 注释还有其他无法保证的用途。我可以看到如何将基于Java的工具应用到Python。例如,我有一个工具可以让您为方法分配特殊警告,并在您调用方法时给出指示,您应该阅读它们的文档(例如,假设您有一个方法,该方法不能用负值调用,但从名称上看是不直观的)。通过注释,我可以在技术上为Python编写类似这样的东西。类似地,如果有正式的语法,就可以编写一个基于标记在大类中组织方法的工具。 |
2
81
函数注释就是你对它们所做的。 它们可用于文档:
它们可用于预状态检查:
也看到 http://www.python.org/dev/peps/pep-0362/ 用于实现类型检查的方法。 |
3
35
|
4
23
只是从我的答案中添加一个很好使用的具体例子 here ,再加上装饰器,可以完成多种方法的简单机制。
以及使用示例:
这可以通过将类型作为 Guido's original post 显示,但注释参数本身更好,因为这样可以避免参数和类型错误匹配的可能性。
注释
:在python中,可以访问注释
|
5
20
uri已经给出了一个正确的答案,所以这里有一个不那么严肃的答案:这样您就可以缩短docstrings。 |
6
12
当我第一次看到注释时,我想“太好了!最后我可以选择某种类型的检查!”当然,我没有注意到注释实际上并没有被强制执行。 所以我决定 write a simple function decorator to enforce them :
我把它添加到 Ensure 图书馆。 |
7
3
很长一段时间以来,人们一直在问这个问题,但问题中给出的示例片段(如文中所述)来自PEP 3107,在THAS PEP的末尾,也给出了可能从PEP的角度回答问题的示例用例;) 以下引自PEP3107 用例 在讨论注释的过程中,提出了一些用例。其中一些是在这里呈现的,按它们传递的信息类型分组。还包括可以使用注释的现有产品和包的示例。
见 PEP 有关特定点(及其引用)的详细信息 |
8
1
尽管这里描述了所有的用法,但最有可能强制使用注释的一种用法是 type hints . 目前这并不是强制执行的,但是从PEP484来看,将来的Python版本只允许类型作为注释的值。 引用 What about existing uses of annotations? :
虽然我还没有在3.6中看到任何无声的贬低,但这很可能会被提升到3.7。 因此,即使可能还有其他一些好的用例,如果您不想在未来改变所有的事情,而这个限制是适当的,那么最好将它们仅用于类型暗示。 |
9
1
python 3.x(仅限)还将函数定义归纳为 要用对象值注释的参数和返回值 用于扩展 . 它的元数据可以解释,更明确的是函数值。
注释编码为
它们被收集到
例子:
这个
这些工具主要设计用于静态分析器,如linters、代码完成库和ides。此外,还提供了用于进行运行时检查的装饰器。在Python中,运行时类型检查并不总是一个好主意,但在某些情况下,它可能非常有用。 |
10
1
作为一个延迟的回答,我的几个包(mallow.script、webcore等)在可用的地方使用注释来声明类型转换(即转换来自web的传入值,检测哪些参数是布尔值开关等),以及执行参数的附加标记。 骨髓脚本为任意函数和类构建了一个完整的命令行接口,并允许通过注释定义文档、强制转换和回调派生的默认值,使用一个装饰器来支持旧的运行时。所有使用注释的库都支持表单:
对docstring或类型转换函数的“裸”支持允许更容易地与其他支持注释的库混合。(例如,有一个使用类型转换的Web控制器,它碰巧也作为命令行脚本公开。)
编辑添加:
我也开始利用
TypeGuard
使用开发时断言进行验证的包。优点:在启用“优化”的情况下运行时(
|
11
-2
注释可用于轻松模块化代码。例如,我维护的程序模块可以定义如下方法:
我们可以向用户请求一个名为“param1”的东西,它是“计数所需的”,应该是“int”。最后,我们甚至可以将用户提供的字符串转换为所需的类型,以获得最轻松的体验。 见 our function metadata object 对于一个开源类,它有助于实现这一点,并且可以自动检索所需的值并将其转换为 任何 所需类型(因为注释是转换方法)。即使是IDES也显示了自动完成的正确性,并且假定类型是根据注释来进行的——这是一个完美的匹配。 |
12
-2
如果你看一下Cython的好处列表,一个主要的好处就是能够告诉编译器Python对象是哪种类型。 我可以预见到将来,Cython(或编译一些Python代码的类似工具)将使用注释语法来实现它们的魔力。 |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Henry · 使用Python将json重新格式化为键值对 2 年前 |
eymentakak · json字典类型错误:字符串索引必须是整数 2 年前 |
Qubix · 从熊猫数据帧创建相对熵矩阵 2 年前 |
guiguilecodeur · 如何删除我的词汇表中的重复元素 2 年前 |
Susheel P M · 这是关于if-else语句[关闭] 2 年前 |
Slartibartfast · 关于Python版本安装 2 年前 |