虽然我知道Python的duck类型概念,但有时我会与函数的参数类型或函数的返回值类型作斗争。
现在,如果我自己写的函数,我知道类型。但是如果有人想使用和调用我的函数,他/她怎么知道类型呢?
我通常将类型信息放在函数的docstring中(比如:"...the id argument should be an integer..."
和"... the function will return a (string, [integer]) tuple."
)
但是,在docstring中查找信息(并将其作为一个编码者放在那里)真的是应该这样做的吗?
编辑:而大多数答案似乎都指向“是,文档!”我觉得对于“复杂”类型来说,这并不总是很容易的。
例如:如何在docstring中简洁地描述函数返回元组列表,每个元组的形式(node id、node name、uptime minutes)和元素分别是string、string和integer?
docstring PEP文档对此没有给出任何指导。
我想反驳的是,在这种情况下,应该使用类,但我发现python非常灵活,因为它允许使用列表和元组传递这些内容,即不使用类。
是的,您应该使用docstring使您的类和函数对其他程序员更友好:
更多:http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring
有些编辑器允许您在键入时查看docstring,因此它确实使工作更容易。
好吧,2011年以来情况有点变化了!现在Python 3.5中有了type hints,您可以使用它来注释参数并返回函数的类型。例如:
现在可以这样写:
正如您现在看到的类型一样,这里有一些可选的静态类型检查,可以帮助您和类型检查器调查代码。
关于更多的解释,我建议看一下PyCharm blog中关于类型提示的博客文章。
这就是动态语言的工作原理。不过,这并不总是件好事,尤其是在文档不好的情况下——有人试图使用文档不好的python框架吗?有时你必须重新阅读源代码。
以下是一些避免duck输入问题的策略:
另外,最重要的一点是:
应该只传递一些定义良好且有文档记录的类型。通过查看代码,任何其他的事情都应该是显而易见的:不要有来自遥远地方的奇怪的参数类型,而这些类型是通过查看代码附近而无法确定的。。。
在python中,有一种技术叫做
doctests
。用它来记录你的方法是如何被期望使用的——同时有很好的单元测试覆盖率!相关问题 更多 >
编程相关推荐