什么是函数接口(在Python中)?

时间:2017-11-28 17:22:03

标签: python function interface

Allen Downey" Think Python,版本2.0.17"对于Python 2.x,唐尼有一个关于函数接口的说法:

  

函数的接口是对其使用方式的总结:参数是什么?什么   功能呢?什么是回报值?如果界面是“as”,那么界面是“干净的”   虽然简单,但并不简单。 (爱因斯坦)”

我根本得不到这个。接口是一个书面摘要,如文档字符串,是否附加到函数的某个位置?或者它完全是另一回事?

我是一个完整的编程初学者,所以我没有太多的背景可供借鉴。我无法在目前(非常低的)水平找到任何我能理解的解释!

快速示例(虽然回答问题并非绝对必要):唐尼谈论画圈(在Turtleworld的背景下)。他的职责是

def circle(t, r):
    circumference = 2 * math.pi * r
    n = 50
    length = circumference / n
    polygon(t, n, length)

其中t是来自Turtleworld的乌龟(他称之为Bob),而r是要绘制的圆的半径。 Polygon是一个函数,它将乌龟,多边形的边n和边长(边)作为参数,并绘制具有这些规格的多边形。如果n足够高,则看起来像一个圆圈。

然后他评论道:

  

此解决方案的一个限制是n是常量,这意味着对于非常大的圈子,   线段太长,对于小圆圈,我们浪费时间绘制非常小   段。一种解决方案是通过将n作为参数来概括函数。   这将为用户(无论谁调用circle)提供更多控制权,但接口将是   不太干净。

再次,什么界面?什么是界面?好吧,让它滚动一下。

  

在此示例中,r属于界面,因为它指定要绘制的圆。 n是   不太合适,因为它与如何渲染圆的细节有关。而不是使界面混乱,最好根据n选择适当的circumference值:

def circle(t, r):
    circumference = 2 * math.pi * r
    n = int(circumference / 3) + 1
    length = circumference / n
    polygon(t, n, length)

什么?你不想弄乱界面(无论是什么),所以你......弄乱了界面?还是功能?还是功能的主体?我的意思是,我不知道界面是什么,但无论它是什么 - 这个解决方案看起来只是整个功能更加混乱,而不仅仅是添加一个参数。

而且,由于我还没有遇到过关于函数如何在任何地方使用的书面摘要,我开始认为我对Downey的函数接口定义的解释都是错误的。

同样,这只是一个例子,我想强调一下,我想了解一般的功能界面,而不仅仅是与这个具体情况有关。但我认为这个例子是一个好的开始。

2 个答案:

答案 0 :(得分:1)

界面是其他人所看到的。当有人必须使用此功能时,他们必须知道名称,它接受的参数以及它将产生什么样的结果。

举一个例子:你现在可能知道print()函数会做什么。你不必知道 这个功能是如何工作的,你所知道的就是它在你调用它时会做什么,你知道你可以传递给它的是什么类型的东西。使用print()函数需要知道的所有事情都是接口。

您也在问题中使用了这个概念。您向我们解释了polygon()函数的作用:

  

Polygon是一个函数,它将乌龟,多边形的边n和边长(边长)作为参数,并绘制具有这些规格的多边形。

当你这样做时,你描述了该功能的界面。

现在,为什么将n作为参数添加到circle()会使接口混乱?因为您作为用户现在必须了解您需要提供的值n。并且要了解您需要了解有关实际实现如何绘制圈子的更多信息。理想情况下,作为调用者您不需要了解此实现细节。你只想要一个圆圈,为什么功能不能这样做,为什么需要知道涉及多少段。

什么做和不做一个干净的界面是主观的,你在编写软件时建立一种感觉。我现在不会太担心这个。

答案 1 :(得分:0)

作者似乎在谈论功能签名。

def add(x, y):
   pas ##some implementation here

告诉你这个函数需要两件事。 你无法看到里面发生了什么。 如果您查看实现,您可以看到内部发生的情况。

为什么这很重要? 这是一个不同的问题 - 但如果一个函数需要很多参数,那么使用它会让人感到困惑。