接口让调用者避免处理不必要的细节,直接做自己想做的事,那么这个接口就是“干净的”,如下例中的函数,调用者只须输入圆的半径 r 和 Turtle 对象名称这两个实参;
import math
defcircle(t, r):
circumference =2* math.pi * r
n =int(circumference /3)+1
length = circumference / n
polygon(t, n, length)
接口让调用者处理不必要的细节,这个接口就是“不干净的”,如下例中的函数,调用者需输入模拟圆的多边形的边数的实参 n ;
import math
defcircle(t, r, n):
circumference =2* math.pi * r
length = circumference / n
polygon(t, n, length)
7、重构
重构(refactoring) :重新整理一个程序以改进函数接口和促进代码复用的过程;
下面第二个函数就是在第一个的基础上重构而得,增加了形参 angle ,促进函数复用;
defpolygon(t, length, n):for i inrange(n):
t.fd(length)
t.lt(360/ n)
defpolygon_arc(t, length, n, angle):for i inrange(int(n * angle /360)):
t.fd(length)
t.lt(360/ n)
8、开发方案
开发计划(development plan) :是一种编写程序的过程;
此例中我们使用的过程是“封装和泛化”:
从写一个没有函数定义的小程序开始;
一旦该程序运行正常,找出其中相关性强的部分,将它们封装进一个函数并给它一个名字;
通过增加适当的形参,泛化该函数。
重复1–3步,直到你有一些可正常运行的函数。 复制粘贴有用的代码,避免重复输入(和重新调试);
寻找机会通过重构改进程序。 例如,如果在多个地方有相似的代码,考虑将它分解到一个合适的通用函数中;
事先不知道如何将程序分解为函数,这是个很有用办法;
9、文档字符串
文档字符串(docstring) :位于函数开始位置的一个字符串, 解释了函数的接口;
所有的文档字符串都是三重引号(triple-quoted)字符串,也被称为多行字符串;
defpolygon_arc(t, n, length, angle):"""Draws n line segments with the given length and
angle (in degrees) between them. t is a turtle.
"""for i inrange(n):
t.fd(length)
t.lt(angle)