从docstring强制python函数参数类型

2024-04-26 14:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

epydoc和Sphinx文档生成器都允许编码器注释任何/所有函数参数的类型。在

我的问题是:当在文档中记录时,是否有一种方法(或模块)在文档字符串中强制实施这些类型(在运行时)。这将不是强类型化(编译时检查),但(更有可能)可能被称为firm typing(运行时检查)。也许会引起“价值错误”,或者更好。。。提出“语义错误”

理想情况下,已经有类似于xkcd的“import antigravity”模块的东西(比如一个模块),而且这个“公司类型检查”模块已经存在于方便下载的地方。在

仅供参考:epydoc和sphinz的docstring如下:

epydoc: 函数和方法参数:

  • @参数p:。。。#函数或方法的参数p的描述。在
  • @类型p:。。。#参数p的预期类型
  • @返回:。。。#函数或方法的返回值。在
  • @类型:。。。#函数或方法的返回值的类型。在
  • @关键词p:。。。#关键字参数p的说明
  • @升起e:。。。#在某种情况下,一种方法或方法的描述 引发异常e

Sphinx:在Python对象描述指令中,带有这些字段的reST字段列表被识别并格式化得很好:

  • param,parameter,arg,arg,key,keyword:参数的说明。在
  • 类型:参数的类型。在
  • 引发,引发,异常,异常:引发(以及何时)特定异常。在
  • 变量的描述。在
  • returns,return:返回值的描述。在
  • rtype:返回类型。在

我能找到的最接近的是Guido在mail.python.org中提到的,由Jukka Lehtosalo在Mypy Examples创建。CMIIW:mypy不能作为py3模块导入。在

不使用docstring的类似stackoverflow问题:


Tags: 模块方法函数文档类型for参数错误
1条回答
网友
1楼 · 发布于 2024-04-26 14:25:08

据我所知,这种情况根本不存在,原因如下:

  • 首先,docstring是文档,就像注释一样。就像评论一样,人们会希望它们不会影响程序的工作方式。使程序的行为依赖于它的文档是一个主要的反模式,也是一个可怕的想法。

  • 其次,docstring不能保证被保留。例如,如果使用-OO运行python,则会删除所有docstring。然后呢?

  • 最后,python3引入了可选的函数注释,这将更好地满足这一目的:http://legacy.python.org/dev/peps/pep-3107/。Python目前对它们什么都不做(它们是文档),但是如果我要编写这样一个模块,我会使用它们,而不是docstring。

我诚实的观点是:如果你要为Python编写一个(必须是半生不熟的)静态类型系统(相当大)的麻烦,那么学习另一种支持静态类型的编程语言(以一种不那么疯狂的方式支持静态类型)会一直让你得到更好的利用:

  • Clojure(http://clojure.org/)是非常动态和强大的(由于它是Lisp的性质),并且支持通过core.typedhttps://github.com/clojure/core.typed)进行可选的静态类型。它面向并发和网络(它有STM和持久数据结构<;3),有一个很棒的社区,是我见过的设计最优雅的语言之一。也就是说,它在JVM上运行,这是一件好事,也是一件坏事。

  • Golang(http://golang.org/)感觉有点像Python(或者至少,它吸引了很多来自Python的难民),是静态类型的,可以编译成本地代码。

  • Rust(http://www.rust-lang.org/)的级别比这个低,但它拥有我见过的最好的类型系统之一(类型推断、模式匹配、特征、泛型、零大小类型…),并在编译时强制实现内存和资源安全。它是由Mozilla开发的一种语言,可以用来编写下一个浏览器(Servo),因此性能和安全性是它的主要目标。你可以把它看作是C++的现代用法。它可以编译为本机代码,但还没有达到1.0的水平,因此,语言本身仍然会发生变化。这就是为什么我还不建议在其中编写生产代码。

相关问题 更多 >