Ius*_*sar 3 python interface function
在 Allen Downey 的 Python 2.x 的“Think Python, version 2.0.17”中,Downey 对函数的接口是这样说的:
函数的接口是对它如何使用的总结:参数是什么?函数有什么作用?返回值是多少?如果一个界面“尽可能简单,但不简单”,那么它就是“干净的”。(爱因斯坦)”
我完全不明白这一点。接口是一个书面摘要,如文档字符串,附加到函数的某个地方吗?或者它完全是别的东西?
我是一个完整的编程初学者,所以我没有很多背景可以借鉴。在我目前(非常低)的水平上,我找不到任何我能理解的解释!
快速示例(虽然不是回答问题所必需的):唐尼谈到了画圆圈(在海龟世界的背景下)。他的功能是
def circle(t, r):
circumference = 2 * math.pi * r
n = 50
length = circumference / n
polygon(t, n, length)
Run Code Online (Sandbox Code Playgroud)
其中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)
Run Code Online (Sandbox Code Playgroud)
什么?你不想弄乱界面(不管那是什么),所以你……弄乱了界面?还是功能?还是函数体?我的意思是,我不知道接口是什么,但不管它是什么——这个解决方案看起来只会让整个函数更加混乱,而不仅仅是添加一个参数。
而且,鉴于我目前还没有遇到关于函数在任何地方如何使用的书面总结,我开始认为我对唐尼函数接口定义的解释是完全错误的。
同样,这只是一个例子,我想强调的是,我想了解函数接口的一般含义,而不仅仅是与这种具体情况有关。但我认为,这个例子是一个好的开始。
界面是其他人看到的。当有人必须使用这个函数时,他们必须知道它的名称、它接受的参数以及它会产生什么样的结果。
举一个不同的例子:你现在可能知道这个print()
函数会做什么。你不必知道这个函数是如何工作的,你只知道调用它时它会做什么,你知道可以传递给它什么类型的东西。要使用该print()
功能,您需要知道的所有事情就是界面。
您在问题中也使用了这个概念。您向我们解释了该polygon()
函数的作用:
Polygon 是一个函数,它将海龟、
n
多边形的边数和(其边的)长度作为参数,并用这些规格绘制多边形。
当你这样做时,你描述了那个函数的接口。
现在,为什么添加n
作为参数来circle()
弄乱界面?因为您作为用户现在必须了解您需要提供什么价值n
。并且要了解您需要更多地了解实际实现如何绘制圆圈。理想情况下,您作为调用者不需要知道这个实现细节。你只是想要一个圆,为什么函数不能那样做,为什么需要知道涉及多少段。
什么能和不能创造一个干净的界面是主观的,这是你在编写软件时建立的一种感觉。我现在不会太担心这个。
归档时间: |
|
查看次数: |
4050 次 |
最近记录: |