文章目录
- 第八章 Python计算生态
- 8.1 计算思维
- 8.2 程序设计方法论
-
- 8.3 计算生态
- 8.3.1 Python标准库
- 8.3.2 Python第三方库
- 8.4 基本的Python内置函数
- 8.5 实例解析——Web页面元素提取
- 习题8
-
第八章 Python计算生态
8.1 计算思维
计算思维是人类科学思维活动的重要组成部分。人类在认识世界、改造世界的过程中表现出三种基本的思维特征:以实验和验证为特征的实证思维,以物理学科为代表;以推理和演绎为特征的逻辑思维,以数学学科为代表;以设计和构造为特征的计算思维,以计算机学科为代表。
计算思维的本质是抽象(Abstraction)和自动化(Automation)。
8.2 程序设计方法论
一个解决复杂问题行之有效的方法被称作自顶而下的设计方法,其基本思想是从一个总问题开始,试图把他分解为很多小问题组成的解决方案。再用同样的方法依次攻破每个小问题,最终问题变得非常小,以至于可以很容易解决。然后只需要把所有的碎片组合起来,就可以得到一个程序。
自顶向下设计中最重要的是顶层设计。
自顶向下的设计过程可以概括为四个步骤:
步骤1:将算法表达为一系列小问题。
步骤2:为每个小问题设计接口。
步骤3:通过将算法表达为接口关联的多个小问题来细化算法。
步骤4:为每个小问题重复上述过程。
8.2.2 自底向上执行
程序编写后,需要经过测试过程。对于较小规模的程序,直接运行即可。但对于稍大规模的程序,需要特殊方法应对测试问题。就像自顶向下设计,每次只设计程序的一部分比一下子解决整个问题更容易,开展测试的更好办法也是将程序分为小部分逐个测试。
执行中等规模程序的最好方法是从结构图最底层开始,而不是从顶部开始,然后逐步上升。或者说,先运行和测试每一个基础函数,再测试由基础函数组成的整体函数,这样有助于定位错误。
通过继续进行这样的单元测试可以检测程序中的每个函数。独立检验每个函数更容易发现错误。通过模块化设计可以分解问题使编写复杂程序成为可能,通过单元测试方法分解问题试运行和调试复杂程序成为可能。
自顶向下和自底向上贯穿程序设计和执行的整个过程。
8.3 计算生态
近20年的开源运动产生了深植于各信息技术领域的大量可重用资源,直接且有力的支撑了信息技术超越其他技术领域的发展速度,形成了“计算生态”。
Python语言从诞生之初致力于开源开放,建立了全球最大的编程计算生态。
Python官方网站提供了第三方库索引功能(PyPI,the Python Package Index),网址如下:https:///
该页面列出来Python语言超过12万个第三方库的基本信息,这些函数库覆盖信息领域技术所有技术方向。
由于Python有非常简单灵活的编程方式,很多采用C、C++等语言编写的专业库可以经过简单的接口封装供Python语言程序调用。这样的粘性功能使得Python语言成为了各类编程语言之间的接口,Python语言也被称为“胶水语言”。
8.3.1 Python标准库
有一部分Python计算生态随Python安装包一起发布,用户可以随时使用,被称为Python标准库。受限于Python安装包的设定大小,标准库数量270个左右。
8.3.2 Python第三方库
更广泛的Python计算生态采用额外安装方式服务用户,被称为Python第三方库。这些第三方库由全球各行业专家、工程师和爱好者开发,没有顶层设计,有开发者采用“尽力而为”的方式维护。Python通过新一代安装工具pip管理大部分Python第三方库的安装。
8.4 基本的Python内置函数
Python解释器提供了68个内置函数,这些函数不需要被引用库而直接使用。这里介绍其中的32个,如表所示。
函数名称 | 函数说明 |
---|
abs(x) | x的绝对值。如果x是复数,返回复数的模 | all(x) | 组合类型变量x中所有元素都为真时返回True,否则返回False;若x为空,返回True | any(x) | 组合类型变量x中任一元素都为真时返回True,否则返回False;若x为空,返回True | bin(x) | 将整数x转换为等值的二进制字符串 | bool(x) | 将x转换为Boolean类型,即True或False | chr(i) | 返回Unicode为i的字符 | complex(r,i) | 创建一个负数r + i * 1j,其中i可以省略 | dict() | 创建字典类型 | divmod(a,b) | 返回a和b的商和余数 | eval(s) | 计算字符串s作为Python表达式的值 | exec(s) | 计算字符串s作为Python语句的值 | float(x) | 将x转换成浮点数 | hex(x) | 将整数转换为十六进制字符串 | input(s) | 获取用户输入,其中s是字符串,作为提示信息。s可选 | int(x) | 将x转换成整数 | len(x) | 计算变量x的长度 | list(x) | 创建或将变量x转换成列表类型 | max(a1,a2,……) | 返回参数的最大值 | min(a1,a2,……) | 返回参数的最小值 | oct(x) | 将整数x转换成等值的八进制字符串形式 | open(fname,m) | 打开文件,包括文本方式和二进制方式等 | ord© | 返回一个字符的Unicode编码值 | pow(x,y) | 返回x的y次幂 | print(x) | 打印变量或字符串x | range(a,b,s) | 从a到b(不含)以s为步长产生一个序列 | reversed® | 返回组合类型r的逆序迭代形式 | round(n) | 四舍五入方式计算n | set(x) | 将组合数据类型x转换成集合类型 | sorted(x) | 对组合数据类型x进行排序,默认从大到小 | str(x) | 将x转换为等值的字符串类型 | sum(x) | 对组合数据类型x计算求和结果 | type(x) | 返回变量x的数据类型 |
8.5 实例解析——Web页面元素提取
Web页面,一般是HTML页面,是Internet组织信息的基础元素。Web页面元素提取是一类常见问题,在网络爬虫、浏览器等程序中有着不可或缺的重要作用。
HTML指超文本标记语言,严格来说,HTML不是一种编程语言,而是一种新型的标记语言,对Web的内容、格式信息描述。
import re
import requests
num = 0 # 给图片名字加数字
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
# 图片页面的url
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1685684057373_R&pv=&ic=0&nc=1&z=0&hd=0&latest=0©right=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&dyTabStr=&ie=utf-8&sid=&word=%E9%BB%91%E5%AE%A2'
html = requests.get(url, headers=header) # 通过requests库请求到了页面
html.encoding = 'utf8' # 防止乱码
html = html.text
res = re.findall(''objURL':'(.*?)'', html) # 正则表达式,筛选出html页面中符合条件的图片源代码地址url
for i in res:
num = num + 1 # 重命名,防止重复
picture = requests.get(i) # 得到每一张图片的大图
file_name = 'C:\\Users\\Administrator\\Desktop\\图片\\' + str(num) + '.jpg' # 重命名
file = open(file_name, 'wb') # 以二进制写入的方式打开图片
file.write(picture.content) # 下载图片至本文件夹
print(i) # 查看图片连接
file.close() # 结束文件操作
习题8
一、选择题
-
以下代码的运行结果为:______ counter = 1
def doLotsOfStuff():
global counter
for i in (1, 2, 3):
counter += 1
doLotsOfStuff()
print(counter)
A 4 B 5 C 1 D 代码错误 正确答案:A -
在程序设计范畴,计算思维不包含以下哪一项? A 理解问题的计算特性 B 将计算特性抽象为计算问题 C 通过程序设计语言实现问题的自动求解 D 以推理和演绎为特征的逻辑思维 正确答案:D -
以下选项中分别表示程序设计和执行方式的是:______ A 通过总结与归纳,推测事件的发展走向 B 通过分析与推理,找到语言逻辑中的漏洞 C 通过程序解决一个计算复杂的问题 D 通过逻辑推理,分析悬疑小说中的谜底 正确答案:C -
以下选项中分别表示程序设计和执行方式的是:______ A 自顶向下;自底向上 B 自底向上;自顶向下 C 自顶向下;自顶向下 D 自底向上;自底向上 正确答案:A -
一下不是自顶向下设计方式步骤的是:______ A 将算法表达为一系列小问题 B 通过单元测试方法分解问题来运行和调试程序 C 通过将算法表达为借口关联的多个小问题来细化算法 D 为每个小问题设计程序接口 正确答案:B -
关于测试一个中等规模程序的说法,以下错误的是:______ A 从结构图最底层开始,逐步上升 B 先运行和测试每一个基础函数,在测试由基础函数组成的整体函数 C 直接运行程序 D 采用自底向上的执行方式 正确答案:C -
以下选项中最能体现计算机中算法含义的是:______ A 数学的计算公式 B 程序设计语言的语句序列 C 对问题的精确描述 D 解决问题的精确步骤 正确答案:D -
以下不属于Python标准库的是:______ A time B random C networkx D optparse 正确答案:C -
以下选项中是Python第三方库的是:______ A turtle B Pyinstaller C random D math 正确答案:B -
以下选项中不是Python内置函数的是:______ A hex() B all() C char() D sorted() 正确答案:C
|