第8章 Python计算生态

来自CloudWiki
跳转至: 导航搜索

计算思维

2006年,时任美国卡内基梅隆大学计算机系主任的周以真教授,提出了计算思维的概念,这一概念,第一次从思维层面阐述了运用计算机科学的基础概念求解问题,设计系统和理解人类行为的过程。

程序设计是实践计算思维的重要手段,我们之前的各个实力虽然问题不同,但都采用了同一种解决思路,抽象实际问题的计算特性,利用计算机求解。

计算思维的本质是抽象和自动化。

程序设计方法论

自顶向下设计

自底向上执行

计算生态

python官方网站提供了第三方库的索引功能:

https://pypi.org/

Python标准库

有一些python安装包一起发布,用户可以随时使用,被称为python标准库,标准库数量不是很多,有270个左右。

Python第三方库

更广泛的Python计算生态,采用额外安装方式服务用户,被称为Python第三方库,这些第三方库由全球各行业专家工程师和爱好者开发。

基本的Python内置函数

  • Python的内置函数列表:
  • P5-4.png

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方法就可以运行啦!