[英]Python Docstring - two different types of arguments of a function
[英]enforcing python function parameters types from docstring
epydoc和Sphinx文档生成器都允许编码器注释任何/所有函数参数的类型。
我的问题是: 在 docstring中记录时 ,是否有一种方法(或模块) 强制执行这些类型(在运行时)。 这不是强类型 (编译时检查),但(更有可能)可能被称为公司类型 (运行时检查)。 也许提出一个“ValueError”,甚至更好......提出一个“SemanticError”
理想情况下,根据xkcd ,已经存在类似于“ import antigravity
antigravity”模块的东西(如模块),并且这个“firm_type_check”模块已经存在于下载方便的地方。
仅供参考:epydoc和sphinz的文档字符串如下:
epydoc:函数和方法参数:
Sphinx:在Python对象描述指令中,具有这些字段的reST字段列表可以很好地识别和格式化:
我能找到的最接近的是Guido在mail.python.org中的提及,由Jukka Lehtosalo在Mypy Examples创建。 CMIIW :mypy无法作为py3模块导入。
类似的stackoverflow问题本身不使用docstring :
据我所知,由于一些重要原因,不存在任何类型的东西:
首先,docstrings是文档,就像注释一样。 就像评论一样,人们会期望它们对你的程序的工作方式没有任何影响。 让你的程序的行为取决于它的文档是一个主要的反模式,一个可怕的想法到处都是。
其次,不保证文档字符串可以保留。 例如,如果您使用-OO
运行python
, -OO
删除所有文档字符串。 然后怎样呢?
最后,Python 3引入了可选的函数注释,它可以更好地实现这一目的: http : //legacy.python.org/dev/peps/pep-3107/ 。 Python目前对它们没有任何作用(它们是文档),但如果我要编写这样的模块,我会使用它们,而不是文档字符串。
我的诚实意见是这样的:如果你要经历(相当大的)麻烦,为Python写一个(必然是半生不熟的)静态类型系统,那么通过学习另一个编程,你将会更好地使用它。以较少疯狂的方式支持静态类型的语言:
Clojure( http://clojure.org/ )具有令人难以置信的动态性和强大功能(由于它本质上是一个Lisp)并支持通过core.typed
( https://github.com/clojure/core.typed )进行可选的静态类型化。 它面向并发和网络(它有STM和持久数据结构<3),有一个很棒的社区,是我见过的设计最优雅的语言之一。 也就是说,它运行在JVM上,这既是好事也是坏事。
Golang( http://golang.org/ )感觉有点Pythonic(或者至少,它吸引了很多来自Python的难民),是静态类型并编译为本机代码。
Rust( http://www.rust-lang.org/ )比它更低级,但它有我见过的最好的类型系统之一(类型推断,模式匹配,特征,泛型,零大小类型) ...)并在编译时强制执行内存和资源安全。 它正在由Mozilla开发,作为编写下一个浏览器(Servo)的语言,因此性能和安全性是其主要目标。 您可以将其视为C ++的现代版本。 它编译为本机代码,但尚未达到1.0,因此,语言本身仍有可能发生变化。 这就是为什么我不建议在其中编写生产代码的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.