首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从docstring中强制python函数参数类型

从docstring中强制python函数参数类型
EN

Stack Overflow用户
提问于 2014-12-10 12:41:16
回答 1查看 2.4K关注 0票数 4

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

我的问题是:当在docstring中记录时,是否有一种方式(或模块)强制执行这些类型(在运行时)。这将不是强类型(编译时检查),但是(更有可能)可能被称为稳固类型(运行时检查)。也许可以提出一个"ValueError",或者更好的.提出"SemanticError“

理想情况下,已经有类似于"import antigravity“模块的东西(如模块),并且这个"firm_type_check”模块已经存在于方便下载的地方。

FYI: epydoc和sphinz的docstring如下:

epydoc:函数和方法参数:

  • @param p:.#函数或方法的参数p的描述。
  • @type p:.#参数p的预期类型。
  • @ value:.#函数或方法的返回值。
  • @rtype:.#函数或方法的返回值类型。
  • @关键字p:.#关键字参数p的描述。
  • @引发e:.#对函数或方法产生异常e的情况的描述。

在指令中的斯芬克斯:,这些字段的reST字段列表被很好地识别和格式化:

  • 参数,参数,arg,参数,键,关键字:参数的描述。
  • 类型:参数的类型。
  • 引发,引发,除了异常:引发(以及何时)特定的异常。
  • 变量的描述。
  • 返回,返回:返回值的描述。
  • 类型:返回类型。

我能找到的最接近的是mail.python.org中的Guido和典型例子的Jukka创作的。CMIIW:mypy不能作为py3模块导入。

类似的堆栈溢出问题,不使用本身使用docstring:

EN

回答 1

Stack Overflow用户

发布于 2014-12-10 13:23:36

据我所知,由于几个重要的原因,这种情况根本不存在:

  • 首先,docstring是文档,就像注释一样。就像评论一样,人们会期望它们对你的程序的工作方式没有任何影响。让程序的行为依赖于它的文档是一个主要的反模式,也是一个可怕的想法。
  • 第二,并不保证保留文档字符串。例如,如果使用python运行-OO,那么所有的文档字符串都会被删除。然后呢?
  • 最后,Python3引入了可选的函数注释,这将更好地满足这个目的:http://legacy.python.org/dev/peps/pep-3107/。Python目前对它们什么也不做(它们是文档),但是如果我要编写这样一个模块,我会使用这些,而不是docstring。

我诚实的观点是:如果您要经历(相当大的)麻烦,为Python编写一个(必须是半生不熟的)静态类型系统,那么通过学习另一种支持静态类型的编程语言,可以更好地利用它:

  • Clojure (http://clojure.org/)非常动态,功能强大(因为它作为Lisp的特性),并且支持通过core.typed (https://github.com/clojure/core.typed)进行可选的静态类型。它面向并发和联网(它有STM和持久数据结构<3 ),有一个很棒的社区,是我见过的设计最优雅的语言之一。也就是说,它运行在JVM上,这既是好事,也是坏事。
  • Golang (http://golang.org/)感觉有点像Pythonic (或者至少,它吸引了很多来自Pythonic的难民),是静态类型的,并被编译成本地代码。
  • 锈病(http://www.rust-lang.org/)是低水平的,但它有我见过的最好的类型系统之一(类型推断,模式匹配,性状,泛型,零尺寸类型.)并在编译时强制执行内存和资源安全。它是由Mozilla开发的,是用来编写下一个浏览器(Servo)的语言,所以性能和安全性是它的主要目标。你可以把它看作是对C++的一种现代方式。它编译成本机代码,但还没有达到1.0,因此,语言本身仍然会发生变化。这就是为什么我不建议在其中编写生产代码。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27401274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档