第8章 Python计算生态
目录
计算思维
2006年,时任美国卡内基梅隆大学计算机系主任的周以真教授,提出了计算思维的概念,这一概念,第一次从思维层面阐述了运用计算机科学的基础概念求解问题,设计系统和理解人类行为的过程。
程序设计是实践计算思维的重要手段,我们之前的各个实力虽然问题不同,但都采用了同一种解决思路,抽象实际问题的计算特性,利用计算机求解。
计算思维的本质是抽象和自动化。
程序设计方法论
自顶向下设计
自底向上执行
计算生态
python官方网站提供了第三方库的索引功能:
https://pypi.org/
Python标准库
有一些python安装包一起发布,用户可以随时使用,被称为python标准库,标准库数量不是很多,有270个左右。
Python第三方库
更广泛的Python计算生态,采用额外安装方式服务用户,被称为Python第三方库,这些第三方库由全球各行业专家工程师和爱好者开发。
基本的Python内置函数
abs( )
- 求数字的绝对值
print ("abs(-40) : ", abs(-40)) print ("abs(100.10) : ", abs(100.10))
divmod() 函数
- python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
>>>divmod(7, 2) (3, 1) >>> divmod(8, 2) (4, 0) >>> divmod(1+2j,1+0.5j) ((1+0j), 1.5j)
enumerate( )
- enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
food = ['西红柿', '花椰菜', '黄瓜', '猪肉', '虾仁'] for i, v in enumerate(food): print('库存的第', i+1, '种商品是:', v)
eval()函数
- eval() 函数用来执行一个字符串表达式,并返回表达式的值。
>>>x = 7 >>> eval( '3 * x' ) 21 >>> eval('pow(2,2)') 4 >>> eval('2 + 2') 4 >>> n=81 >>> eval("n + 4") 85
input( )函数
- 接收用户的输入,
- 注意:python3 里 input() 默认接收到的是 str 类型。
>>> name = input("pls:") pls:123 >>> name '123'
len( )
- Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。
>>>str = "runoob" >>> len(str) # 字符串长度 6 >>> l = [1,2,3,4,5] >>> len(l) # 列表元素个数 5
map( )函数
- map() 会根据提供的函数对指定序列做映射。
- 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
- Python 2.x 返回列表。Python 3.x 返回迭代器。
>>>def square(x) : # 计算平方数 return x ** 2 >>> list(map(square, [1,2,3,4,5])) # 计算列表各个元素的平方 [1, 4, 9, 16, 25] >>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) # 使用 lambda 匿名函数 [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加 >>> list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])) [3, 7, 11, 15, 19]
实例解析:Web页面元素提取
本实例,一个html形式的外部页面为输入对国家地理中文网的页面进行元素分析,提取、输出,并保存页面中包含的图片链接,重点在于理解自顶向上向下的设计思路。
http://www.ngchina.com.cn/
在页面上点击鼠标右键,选择查看页面源代码选项,即可查看描述页面的html代码,拷贝内容后将源代码保存文件index.html。
自动的从一个链接获取html页面是网络爬虫的功能,这里暂时使用手工方式,将首页保存为html文件,开始本实例的编写。
本实例功能可以整体分为如下四个步骤。
步骤一,读取保存在本地的html文件。
步骤二,解析并提取其中的图片链接。
步骤三,输出提取结果到屏幕。
步骤四,保存提取结果为文件。
根据上述步骤,写出主程序如下。
def main(): inputfile = 'nationalgeographic.html' outputfile = 'nationalgeographic-urls.txt' htmlLines = getHTMLlines(inputfile) imageUrls = extractImageUrls(htmlLines) showResults(imageUrls) saveResults(outputfile, imageUrls)
getHTMLlines()函数读取html文件内容,
def getHTMLlines(htmlpath): f = open(htmlpath, "r", encoding='utf-8') ls = f.readlines() f.close() return ls
extractImageUrls()是程序的核心,用于解析文件并提取图像的url。
def extractImageUrls(htmllist): urls = [] for line in htmllist: if 'img' in line: url = line.split('src=')[-1].split('"')[1] if 'http' in url: urls.append(url) return urls
showResults函数将获取的链接输出到屏幕上。
def showResults(urls): count = 0 for url in urls: print('第{:2}个URL:{}'.format(count, url)) count += 1
saveResult保存结果到文件:
def saveResults(filepath, urls): f = open(filepath, "w") for url in urls: f.write(url+"\n") f.close()
然后调用main方法就可以运行啦!