- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要问我非常具体的问题,我发现我需要相当长的介绍来激发和解释它——我保证最后会有一个合适的问题!
在阅读大型 Python 代码库的一部分时,有时会遇到一些代码,其中参数所需的接口(interface)与同一模块或包中的“附近”代码并不明显。例如:
def make_factory(schema):
entity = schema.get_entity()
...
代码处理的可能有许多“模式”和“工厂”,“def get_entity()”也可能很常见(或者函数可能不调用任何方法在架构上,但只是将其传递给另一个函数)。因此,快速 grep 并不总是有助于找到更多关于“模式”是什么的信息(返回类型也是如此)。虽然“鸭子类型”是 Python 的一个很好的特性,但有时读者对作为“模式”传入的参数接口(interface)的不确定性会妨碍快速理解代码(对于典型具体的不确定性也是如此实现接口(interface)的类)。查看自动化测试会有所帮助,但明确的文档可能会更好,因为它更容易阅读。任何此类文档在其本身可以被测试时都是最好的,这样它就不会过时。
Doctests 是解决这个问题的一种可能方法,但这不是这个问题的目的。
Python 3 具有“参数注释”功能(函数注释功能的一部分,在 PEP 3107 中定义)。该功能的用途并未由语言定义,但可以用于此目的。这可能看起来像这样:
def make_factory(schema: "xml_schema"):
...
此处,“xml_schema”标识传递给此函数的参数应支持的 Python 接口(interface)。在其他地方会有根据属性、方法及其参数签名等定义该接口(interface)的代码,以及允许内省(introspection)以验证特定对象是否提供接口(interface)的代码(可能使用类似 zope.interface/zope.schema 的东西实现)。请注意,这并不一定意味着每次传递参数时都会检查接口(interface),也不一定会进行静态分析。相反,定义接口(interface)的动机是提供编写自动化测试的方法,以验证该文档没有过时(它们可能是相当通用的测试,因此您不必为每个功能编写新测试使用参数,或者您可以打开运行时接口(interface)检查,但只有在运行单元测试时才可以)。你可以进一步注释返回值的接口(interface),我就不举例了。
所以,问题:
我确实想这样做,但是使用 Python 2 而不是 Python 3。Python 2 没有函数注释功能。 Python 2 中“最接近的东西”是什么?显然有不止一种方法可以做到这一点,但我怀疑只有一种(相对)明显的方法可以做到这一点。
额外的要点:命名一个实现了一种明显方式的库。
最佳答案
看看plac
它使用注释为脚本定义命令行界面。在 Python 2.x 上它使用 plac.annotations()
decorator .
关于python - 如何记录和测试 Python 2 中形式参数所需的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810063/
views.py from django.shortcuts import render from basic_app.forms import UserForm,UserProfileInfoFor
我已经将一个程序从 R 翻译成 C++。有问题的程序使用不同的值运行自身的多次迭代,然后生成直方图和绘图。 C++ 图形很挑剔,所以我决定将值保存为 csv 格式并在 R 中绘制它们。文件相当大,对于
假设我们有一个符号,有一个符号值、一个函数值和一个属性列表,我们称它为 q .假设我们有一个函数 f带形参v ,例如(f (v) ... )并调用像 (f q) 这样的函数. 我的问题是:到底传递给
当我在 R 中运行以下代码时, library(mclust) data(iris) mc <- Mclust(iris[,1:4], 3) plot(mc, data=iris[,1:4], wha
我是一名优秀的程序员,十分优秀!