如何知道函数返回类型和参数类型?

2024-03-28 13:21:16 发布

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

虽然我知道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非常灵活,因为它允许使用列表和元组传递这些内容,即不使用类。


Tags: the函数文档idnode概念类型列表
3条回答

是的,您应该使用docstring使您的类和函数对其他程序员更友好:

更多:http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring

有些编辑器允许您在键入时查看docstring,因此它确实使工作更容易。

好吧,2011年以来情况有点变化了!现在Python 3.5中有了type hints,您可以使用它来注释参数并返回函数的类型。例如:

def greeting(name):
  return 'Hello, {}'.format(name)

现在可以这样写:

def greeting(name: str) -> str:
  return 'Hello, {}'.format(name)

正如您现在看到的类型一样,这里有一些可选的静态类型检查,可以帮助您和类型检查器调查代码。

关于更多的解释,我建议看一下PyCharm blog中关于类型提示的博客文章。

这就是动态语言的工作原理。不过,这并不总是件好事,尤其是在文档不好的情况下——有人试图使用文档不好的python框架吗?有时你必须重新阅读源代码。

以下是一些避免duck输入问题的策略:

  • 为问题域创建语言
  • 这有助于你正确命名
  • 使用类型在域语言中表示概念
  • 使用域语言词汇表的名称函数参数

另外,最重要的一点是:

  • 尽可能将数据保存在本地!

应该只传递一些定义良好且有文档记录的类型。通过查看代码,任何其他的事情都应该是显而易见的:不要有来自遥远地方的奇怪的参数类型,而这些类型是通过查看代码附近而无法确定的。。。

在python中,有一种技术叫做doctests。用它来记录你的方法是如何被期望使用的——同时有很好的单元测试覆盖率!

相关问题 更多 >