欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Quick_Python_5

程序员文章站 2022-05-04 18:08:36
...

Quick_Python_5

Markdown By 云天

上节课,我留下了一个伏笔,那么Python如此强大而充满活力的秘诀之一究竟是什么呢?

答案是:Python包与模块!

Package and Module

Learning by practicing is the best way

关于Python包与模块,我觉得讲太多理论对于初学者来说,是不太合适的。最好的方法,便是在看例程和实践中体会和学习。

先看一个基础的例程。我们使用import math as ma导入math这个模块,并给它一个别名ma。我们调用这个模块中的sqrt()函数进行开方的运算,并打印结果:

import math as ma
value = ma.sqrt(4)
print(value)

2.0

如果我们不很清楚所导入的模块的所有功能,可以怎么快速获取呢?这时,可以使用dir()的方法,程序运行后会返回模块中所有函数,或是说所有方法,你可以尽情查阅:

# get all the values of math
dir(math)

[‘doc’,
‘loader’,
‘name’,
‘package’,
‘spec’,
‘acos’,
‘acosh’,
‘asin’,
‘asinh’,
‘atan’,
‘atan2’,
‘atanh’,
‘ceil’,
‘copysign’,
‘cos’,
‘cosh’,
‘degrees’,
‘e’,
‘erf’,
‘erfc’,
‘exp’,
‘expm1’,
‘fabs’,
‘factorial’,
‘floor’,
‘fmod’,
‘frexp’,
‘fsum’,
‘gamma’,
‘gcd’,
‘hypot’,
‘inf’,
‘isclose’,
‘isfinite’,
‘isinf’,
‘isnan’,
‘ldexp’,
‘lgamma’,
‘log’,
‘log10’,
‘log1p’,
‘log2’,
‘modf’,
‘nan’,
‘pi’,
‘pow’,
‘radians’,
‘remainder’,
‘sin’,
‘sinh’,
‘sqrt’,
‘tan’,
‘tanh’,
‘tau’,
‘trunc’]

下面的这个例程,将具有一些趣味性。我们使用了两个模块:randomtime。我们程序运行的效果是,每隔一秒依次打印print('开奖倒计时', 3)print('开奖倒计时', 2)print('开奖倒计时', 1),然后随机选择一个部门并打印它中奖的消息。

一个如此简洁的程序,在Python模块的帮助下,居然实现了这样有趣的功能!你说不有趣也行,不过我们寝室谁拿外卖的问题,可算和平解决了【手动滑稽】:

import random
import time

dom = ['办公室', '项目部', '公益部', '外宣部', '实践部']
result = random.choice(dom)

print('开奖倒计时', 3)
time.sleep(1)       
print('开奖倒计时', 2)
time.sleep(1)
print('开奖倒计时', 1)
time.sleep(1)

print('恭喜' + result + '中奖!')

1—> 最简单的Python模块其实就是一个.py文件(像是C语言里的.C文件),你也可以自己写一个模块,然后在自己的程序里导入它。不过,如果你想让更多人导入你的模块,那你得写得好一些,希望有一天你可以做到;

2—> 如果必须要区分包和模块的话,你可以理解为,包是模块更高一级的抽象;

3—> 很多流行的库,如Numpy, Matplotlib, Seaborn, Scipy等,都是以包的形式发布的。

'''
<1> Python module is just a simple .py file, you can also write your own modules and then import them
<2> Package is a higher level of abstraction of module
<3> SciPy, NumPy, Matplotlib, Seaborn are all been released in the form of package
'''

TOP100 Movies

随着我们对模块的了解不断深入,我们的课程也接近了尾声。剧情进展到最后,一般是要放大招的。那这里,我提供一段之前写的代码,看不懂没关系,主要目的是让你感受模块的强大,Python的强大。

下面这数十行代码,实现的功能是:爬取豆瓣TOP100电影的讯息(包括排名,电影名称,豆瓣评分,点评和电影链接),然后用Python创建一个Excel表格,把爬取到的数据存储进去。完事之后,你就可以把Excel分享给好朋友啦,这样子一起选电影,多硬核,多舒服!

当然,涉及到一个实用爬虫,你需要懂得一些网页前端的知识才可以。不过今天,我更主要的一个目的,是通过其中几处细节,让你意识到原来之前所学的知识可以这样用!

先快速读读这些代码,不懂就跳过:

# Top100_movie
import requests, bs4
import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = 'TOP100'

sheet['A1'] = '排名'
sheet['B1'] = '电影'
sheet['C1'] = '豆瓣评分'
sheet['D1'] = '点评'
sheet['E1'] = '电影链接'

movie = []

for x in range(4):
    url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='
    res = requests.get(url)
#     print(res.text)
    bs = bs4.BeautifulSoup(res.text, 'html.parser')
    bs = bs.find('ol', class_="grid_view")
    
    for titles in bs.find_all('li'):
        num = titles.find('em', class_="").text
        title = titles.find('span', class_="title").text
        score = titles.find('span', class_="rating_num").text
        url_movie = titles.find('a')['href']

        if titles.find('span', class_= "inq") != None:
            comment = titles.find('span', class_="inq").text
            
            movie.append([num, title, score, comment, url_movie])

# print(movie)
for i in movie:
    sheet.append(i)

wb.save('TOP100_movie.xlsx')

1—> 通过import requests, bs4import openpyxl这两行代码,我们可以知道,三个模块被导入了。其中,前两个是非常强大的爬虫模块,后一个是模拟Excel各种操作的“神器”;

2—> 请大家仔细观察下面这两行提取出的代码:

for x in range(4):
    url = 'https://movie.douban.com/top250?start=' + str(x*25) + '&filter='

这是一个循环对吧,扎实的同学应该还能回想起range()函数。第一步,找一找循环变量x在第二行的哪里出现了?str(x*25)对吧!我们进一步发现这行代码实现了一个字符串的拼接,而拼接后的结果,很像…一个网址!对啦,其实url的含义就是一个网址。

我们之前说,range(n)可以打印出0 ~ (n-1)的数,在这里也就是0,1,2,3。所以str(x*25)的值以25为基数翻倍。熟悉豆瓣网页的小伙伴知道,豆瓣一页有25部电影,所以这个看似朴素的循环其实在为**“翻页”**操作做准备啦!

3—> 重温append

movie.append([num, title, score, comment, url_movie])

还记得列表中append函数用来做什么吗?向列表中添加元素!而这里,有一种特别棒的思想,那就是把五个元素先封装成一个列表,再用append函数将封装好的列表整体添加进一个列表。听起来有些复杂,可是实际很有用。

我再举一个例子:你想设计一个交互式选择题,那就可以封装一个字典,整体添加进列表。其中A,B,C,D便是键,对应的选项内容便是值啦!

我们的第六课结束啦,Quick_Python_5 !

这节课,我们围绕Python包和模块这两个核心,用了许多例程帮助大家体会和理解。这也是Python编程语言如此强大且充满生命力的最重要的原因之一。

至此为止,Quick_Python要传授给你的理论知识算是告一段落了,通过几天的学习,你向着Python的世界迈出了坚定而踏实的第一步。我们的课程还有一次,我想做个总结,同时和你谈谈未来该如何保持学习。Keep Learning!

相关标签: Python 教程

推荐阅读