首先介绍一个库,Python 中有一个模块叫 turtle,是一个图形库,可以用来画一些简单的形状。我将基于这个图形库教会大家如何做接口设计。

先来创建一个 turtle 对象。

import turtle

bob = turtle.Turtle()

turtle.mainloop()

这段代码就会新建一个窗口,里面包含一个小箭头,这个小箭头就是画图的起点。

下面介绍一下怎么用 turtle 来画图,以下是常用的方法,记住这些就够了。

import turtle

bob = turtle.Turtle() # 创建 turtle 对象

bob.fd(100) # 向前移动 100 个像素

bob.bk(100) # 向后移动 100 个像素

bob.lt(90) # 左转 90 度

bob.rt(90) # 右转 90 度

bob.pu() # 笔尖朝上

bob.pd() # 笔尖朝下

turtle.mainloop()

第一个任务,画一个正方形

当然可以用简单重复的办法来画,事实上新手也是这么做的:

import turtle

bob = turtle.Turtle()

bob.fd(100)

bob.rt(90)

bob.fd(100)

bob.rt(90)

bob.fd(100)

bob.rt(90)

bob.fd(100)

turtle.mainloop()

更进一步你想到了用 for 循环:

import turtle

bob = turtle.Turtle()

for i in range(4):

bob.fd(100)

bob.rt(90)

turtle.mainloop()

(细心的同学可能会发现箭头方向变了)

这时,为了提高代码的可读性和重用性,一般会将代码封装起来,成为一个函数:

def square(t):

for i in range(4):

bob.fd(100)

bob.rt(90)

square(bob)

然后你可能会想了,这正方形的边长都是固定的,我想画一个不一样的怎么办?

第二个任务,画一个多边形

这个时候我们需要泛化。

def square(t, length):

for i in range(4):

bob.fd(length)

bob.rt(90)

square(bob, 100)

更进一步,想要任意边数的多边形:

def polygon(t, n, length):

angle = 360/n

for i in range(n):

bob.fd(length)

bob.rt(angle)

polygon(bob, 7, 70)

polygon(bob, n=7, length=70) # 关键字参数

现在你就知道了,泛化就是给函数添加参数的过程,当参数比较多的时候可以用关键字参数。

第三个任务,画一个圆

这一步要写一个 circle 函数,接受形参 r,表示圆的半径,下面是一个例子:

def circle(t, r):

circumference = 2 * math.pi * r # math 是一个数学模块,math.pi 指 π 的值

n = 50

length = circumference / n

polygon(t, n, length)

circle(bob, 70)

这个方案的问题在于,n 是一个定值,我们是通过画很多个边,来近似成一个圆的,我们可以加上一个形参,给用户更多的选择,但是,这样接口就不太整洁。

函数的接口是如何使用函数的说明:有哪些参数?这个函数做什么?返回值是什么?

说一个接口整洁,是说它能够让调用者完成想要完成的事情,而不用关注细节,这里面 n 就属于画圆的细节,下面是另一个例子:

def circle(t, r):

circumference = 2 * math.pi * r # math 是一个数学模块,math.pi 指 π 的值

n = int(circumference / 3) + 1

length = circumference / n

polygon(t, n, length)

这里面 n 的值是一个接近 circumference / 3 的整数,所以每个边长都近似是 3,已经小到足够画出好看的圆了。

第四个任务,画一个圆弧

写 circle 函数的时候,可以复用 polygon,因为边数很多的正方形就是圆。但是圆弧则不太好办,因此需要修改 polygon 函数:

def arc(t, r, angle):

arc_length = 2 * math.pi * r * angle / 360

n = int(arc_length / 3) + 1

step_length = arc_length / n

step_angle = angle / n

for i in range(n):

t.fd(step_length)

t.lt(step_angle)

你会发现,这个函数下面的部分很像 polygon 函数,但是如果不修改 polygon 的接口,就没办法直接用,我们也可以泛化 polygon 函数,但是那样就不叫 polygon(多边形)了,因此将更泛化的名字叫 polyline(多边线):

def polyline(t, n, length, angle):

for i in range(n):

t.fd(length)

t.rt(angle)

现在就可以重写 polygon 和 arc 了:

def polygon(t, n, length):

angle = 360 / n

polyline(t, n, length, angle)

def arc(t, r, angle):

arc_length = 2 * math.pi * r * angle / 360

n = int(arc_length / 3) + 1

step_length = arc_length / n

step_angle = angle / n

polyline(t, n, step_length, step_angle)

最后,可以重写 circle,调用 arc:

def circle(t, r):

arc(t, r, 360)

这个过程,叫重构。

而一个设计良好的接口,文档字符串是必不可少的,一般用三引号括起来:

def polyline(t, n, length, angle):

"""Draws n line segments with the given length and angle between them. t is a turtle."""

for i in range(n):

t.fd(length)

t.rt(angle)

下面我们总结一下:

我们做一个开发计划一般有以下步骤:最开始写一些小程序,不需要函数定义;

将部分功能封装成函数;

泛化函数,添加合适的形参;

重复 1 到 3;

重构程序,如果有相似的代码的话,就做成一个更通用的函数。

今天学到了几个概念,一并总结一下:封装就是将部分功能组成一个函数;

泛化就是给函数添加形参;

接口需要整洁,形参中不要有关于函数内部细节的参数;

重构相似的代码,使代码更为通用。

python什么是接口设计_给女朋友讲什么叫接口设计!相关推荐

  1. 原子设计_您需要了解的有关原子设计的4件事

    原子设计 重点 (Top highlight) Industries such as Architecture or Industrial Design have developed smart mo ...

  2. 软件的接口设计图_【学术论文】高速接口JESD204B的灵敏放大器设计

    摘要 采用UMC 28 nm CMOS工艺,在低电源电压下设计实现了一种高速.低失调的灵敏放大器.在传统差分放大器.AB类锁存器等电路的基础上进行改进,提出了一种新型结构的灵敏放大器.利用Cadenc ...

  3. book电子书数据库设计_如何为杀手book的封面设计写出完美的摘要

    book电子书数据库设计 逐步出版真正的假人 (BOOK PUBLISHING STEP BY STEP FOR REAL DUMMIES) I have spent 18 years in adve ...

  4. 没有体现JAVA接口功能_深入浅出分析Java抽象类和接口【功能,定义,用法,区别】...

    本文实例讲述了Java抽象类和接口.分享给大家供大家参考,具体如下: 对于OOP编程来说,抽象是它一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:抽象类和接口. 这两者有相似之处也有很 ...

  5. 小型蘑菇定向切片机设计_鲜枣去核机的设计_玉米脱粒机的设计_振动式马铃薯收获机的设计_谷物干燥机的设计_锤片式饲料粉碎机的设计_山楂去核机的设计_萝卜切丝机设计_板栗去皮机设计_锤式破碎机设计……

    棉花打包机的设计[说明书(论文)+CAD+solidworks] 毕业设计_气动四自由度机械手结构设计(设计说明书+CAD图纸)    套类零件自动上下料机构 玉米脱粒机的设计(说明书+cad图纸+p ...

  6. 接口结构_适用于Mac系统的API接口调试应用

    Apifox 中文版是一款适用于 Mac 的API接口调试应用.官方介绍 Apifox = Postman + Swagger + Mock.Apifox 可以用于接口文档.接口调试.Mock.自动化 ...

  7. 安装工程造价课程设计_某单元楼安装工程造价课程设计

    1.房屋建筑学课程设计,五层楼,2个单元楼,两个户型,A2 图,详情见附件 我知道的,就这么多 你怎么看,我才理解的 房屋建筑学课程设计 2.房屋建筑学课程设计任务书. 本设计为某城市住宅,位于城市居 ...

  8. java 调用usb接口吗_使用java对电脑USB接口演示

    使用java对电脑USB接口演示 1.首先创建USB接口 package com.zr; //USB接口 public interface USB { //打开设备 void open(); //关闭 ...

  9. python 接口设计_手把手教你在机器学习过程设计Python接口

    前言 为了进行机器学习工程,首先要部署一个模型,在大多数情况下作为一个预测API.为了使此API在生产中工作,必须首先构建模型服务基础设施.这包括负载平衡.扩展.监视.更新等等. 乍一看,所有这些工作 ...

最新文章

  1. zabbix 监控CDN带宽
  2. 部署Rsync服务器-差异化数据同步
  3. mysql存储过程和游标遍历
  4. 3.Excel数据透视表
  5. 轻松搭建docker应用的mesos集群
  6. 计算机定时关机教程,电脑定时关机怎么设置|如何让电脑定时关机
  7. 爬虫mm131明星照片
  8. weight和weightSum的区别
  9. 笔记:毫米波雷达传感器,优势、应用和产业规模
  10. 追书神器 三星s8+ 语音朗读锁屏后中断问题解决办法
  11. 反射、装箱拆箱、ArrayList与Array的区别 - 天生舞男 - 博客园
  12. 从头开始绘制一个圆锥体
  13. NIO与JVM基本概念
  14. 多源异构航班航迹数据流实时融合方法研究
  15. 什么是stub文件_stub code
  16. [工具使用]SqlMap
  17. excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?
  18. Ubuntu安装Mysql启用远程连接
  19. 客户端安装zabbix_agentd
  20. 普华linux证书怎么样,来自一位普华二本学姐的亲述:“四大”真的看重证书么?...

热门文章

  1. 刷题总结——Tree2cycle(hdu4714 树形dp)
  2. c#“集合已修改;可能无法执行枚举操作”
  3. DIDAO.Common --- 项目中的常用类及其中函数
  4. 文件不存在的话创建文件 文件上传所遇到的问题、
  5. 泛型ListT排序(利用反射)
  6. sql server dateadd()
  7. Python生成器 yield
  8. 如何避免delete和delete[]的尴尬?
  9. [转载] Python: ord()函数
  10. 85. Maximal Rectangle 由1拼出的最大矩形