《像计算机科学家一样思考Python》——4.6 接口设计

简介:

本节书摘来自异步社区《像计算机科学家一样思考Python》一书中的第4章,第4.6节,作者[美]Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

4.6 接口设计

下一步是写画圆的circle函数,接受形参r,表示圆的半径。下面是一个简单的例子,通过调用polygon函数画50边的多边形:

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

第一行计算半径为r的圆的周长,使用公式2πr。因为我们使用的是math.pi,所以需要先导入math模块。依照惯例,import语句一般都放在脚本开头。

n是我们用于近似画圆的多边形的边数,所以length是每个边的长度。因此,polygon画出一个50边形,近似于一个半径为r的圆。

这个解决方案的缺点之一是n是一个常量,因此对于很大的圆,多边形的边线太长,而对于小圆,我们又浪费时间去画过短的边线。解决办法之一是泛化这个函数,加上形参n。这样可以给用户(调用circle函数的人)更多的控制选择,但接口就不那么清晰简洁了。

函数的接口是如何使用它的概要说明:它有哪些参数?这个函数做什么?它的返回值是什么?我们说一个接口“简洁”(clean),是希望它“尽可能简单,但不能过度。(爱因斯坦)”。

在这个例子里,r属于函数的接口,因为它指定了所画的圆的基本属性。相对地,n则不那么适合,因为它说明的是如何画圆的细节信息。

所以与其弄乱接口,不如在代码内部根据周长来选择合适的n值:

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

现在多边形的边数(近似)是circumference/3,所以每个边长(近似)是3,已经小到足够画出好看的圆形,但又足够大到不影响画线效率,并且适合于任何尺寸的圆。

相关文章
|
17天前
|
存储 缓存 JavaScript
python实战篇:利用request库打造自己的翻译接口
python实战篇:利用request库打造自己的翻译接口
29 1
python实战篇:利用request库打造自己的翻译接口
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
3月前
|
监控 API Python
京东商品sku属性数据接口Python
京东商品sku属性数据接口Python
28 0
|
2月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
3月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
86 7
|
1月前
|
前端开发 API 网络架构
Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!
Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!
|
1月前
|
缓存 负载均衡 Java
Python实现API接口并发测试
Python实现API接口并发测试
57 0
|
1月前
|
开发框架 Java .NET
闪速码短信Python接口SDK
闪速码短信Python接口SDK
66 4
|
1月前
|
存储 关系型数据库 MySQL
解释一下如何使用Python的数据库接口库进行数据库操作。
【2月更文挑战第12天】【2月更文挑战第33篇】解释一下如何使用Python的数据库接口库进行数据库操作。
|
2月前
|
Python
Python接口-3
Python接口-3
20 1