1、什么是模块
首先我们回顾一下类的结构。
类:
-----函数;
-----变量。
模块呢?
模块是最高级别的程序组织单元。
则模块的结构是这样的。
模块
-------函数
-------变量
--------------类
--------------函数
--------------变量
封装模块的目的也是为了把程序代码和数据存放起来以便再次利用。如果封装成类和函数,主要还是便于自己调用,但封装了模块,我们不仅能自己使用,文件的方式也很容易共享给其他人使用。
使用模块主要有两种方式,一种是自己建立模块并使用,另外一种是使用他人共享的模块。
2、使用自己的模块
建立模块,其实就是在主程序的py文件中,使用import语句导入其他py文件。
2.1、import语句
我们使用import语句导入一个模块,最主要的目的并不是运行模块中的执行语句,而是为了利用模块中已经封装好的变量、函数、类。
下面的案例中,就是两个PY文件,而MAIN文件调用了其中的一个PY文件。
# 【文件】:story.py
sentence = '从前有座山,'
def mountain():
print('山里有座庙,')
class Temple:
sentence = '庙里有个老和尚,'
@classmethod
def reading(cls):
print('在讲故事,')
class Story:
sentence = '一个长长的故事。'
def reading(self):
print('讲的什么故事呢?')
# 【文件:main.py】
import story as s
for i in range(10):
print(s.sentence)
s.mountain()
print(s.Temple.sentence)
s.Temple.reading()
A = s.Story()
print(A.sentence)
A.reading()
print()
当我们需要同时导入多个模块时,可以用逗号隔开。比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件。
2.2、from ... import ... 语句
from … import …语句可以让你从模块中导入一个指定的部分到当前模块。
# 【文件】test.py
a = '我是模块中的变量a'
def hi():
a = '我是函数里的变量a'
print('函数“hi”已经运行!')
class Go1: # 如果没有继承的类,class语句中可以省略括号,但定义函数的def语句括号不能省
a = '我是类1中的变量a'
@classmethod
def do1(cls):
print('函数“do1”已经运行!')
class Go2:
a = '我是类2中的变量a'
def do2(self):
print('函数“do2”已经运行!')
【文件】:main.py
from test import *
print(a) # 打印变量“a”
hi() # 调用函数“hi”
print(Go1.a) # 打印类属性“a”
Go1.do1() # 调用类方法“Go1”
A = Go2() # 实例化“Go2”类
print(A.a) # 打印实例属性“a”
A.do2() # 调用实例方法“do2”
2.3、if name == 'main'
# 【文件:xx.py】
代码块 ①……
if __name__ == '__main__':
代码块 ②……
这里的【if name == 'main'】就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这是一种程序员达成共识的编码习惯。
# 我们在main主模块执行,则这句话会被打印出来
if __name__ == '__main__':
print('是主模块的时候才会执行以下语句:')
# 我们在main主模块执行,则这句话不会被打印出来
if __name__ == '__xyz__':
print('是xyz模块的时候才会执行以下语句:')
3、使用其他人的模块
在之前的代码中,曾经使用时间和随机数模块,即我们常在第一句代码导入的import time和import random其实就是在导入time和random模块。
这些模块,就是其他人已经写好的模块。
3.1、初探借用模块
time模块和random模块是Python的系统内置模块,也就是说Python安装后就准备好了这些模块供你使用。
此外,Python作为一门胶水语言,一个强大的优势就是它拥有许多第三方的模块可以直接拿来使用。
如果是第三方编写的模块,我们需要先从Python的资源管理库下载安装相关的模块文件。
下载安装的方式是打开终端,Windows用户输入pip install + 模块名;苹果电脑输入:pip3 install + 模块名,点击enter即可。(需要预装python解释器和pip)
比如说,爬虫时我们会需要用到requests
这个库(库是具有相关功能模块的集合),就需要在终端输入pip3 install requests(Mac用户)的指令。
比如我们打开Python下预置的random模块,我们可以看到其结构如下图:
虽然可以通过看源代码的方式来理解这个模块的功能,但如果想要高效地学会使用一个模块,看源代码并不是最佳选项。
3.2、如何自学模块
学习模块的核心是搞清楚模块的功能,也就是模块中的函数和类方法有什么作用,以及具体使用案例长什么样。
可以阅读官方文档:https://docs.python.org/3.6/library/random.html
也可以直接百度一下。
搜到教程后,我们重点关注的是模块中的函数和类方法有什么作用,然后把使用案例做成笔记(还记得第8关谈到的如何做学习笔记么?)。
例如random模块的关键知识(也就是比较有用的函数和类方法),可以做成这样的**案例笔记:**
import random # 调用random模块
a = random.random() # 随机从0-1之间抽取一个小数
print(a)
a = random.randint(0,100) # 随机从0-100之间抽取一个数字
print(a)
a = random.choice('abcdefg') # 随机从字符串/列表/字典等对象中抽取一个元素(可能会重复)
print(a)
a = random.sample('abcdefg', 3) # 随机从字符串/列表/字典等对象中抽取多个不重复的元素
print(a)
items = [1, 2, 3, 4, 5, 6] # “随机洗牌”,比如打乱列表
random.shuffle(items)
print(items)
3.3、实战:学习csv模块
csv
是一种文件格式,可以把它理解成“简易版excel”。学会了csv模块,就可以用程序处理简单的电子表格了。
使用import语句导入csv模块,然后用dir()函数看看它里面有什么东西:
import csv
# dir()函数会得到一个列表,用for循环一行行打印列表比较直观
for i in dir(csv):
print(i)
但是我们不懂这些函数,咋办?我们可以去官网或百度找到的中文文档中查找。
官方教程:https://docs.python.org/3.6/library/csv.html
中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv
通过阅读实例,我们可以掌握一些简单的用法:
3.3.1、读取csv数据
新建一个test.csv,里面存储下列数据。
import csv
with open('d:\\test.csv', newline = '', encoding = 'utf-8') as f:
#参数encoding = 'utf-8'防止出现乱码
readcsv = csv.reader(f)
for row in readcsv:
print(row)
3.3.2、写入csv数据
先创建一个变量名为writer(也可以是其他名字)的实例,创建方式是writer = csv.writer(x),然后使用writer.writerow(列表)就可以给csv文件写入一行列表中的内容。
还是上面的test.csv中的上品数据,我们尝试用writerow()方法为它追加写入两行列表:['4', '猫砂', '25', '1022', '886']、['5', '猫罐头', '18', '2234', '3121']。
思路,首先我们需要回忆open函数中是如何做读、写、追加的。
我们看到,追加是用的a
,写入是xxx.writerow[x,x,x],则代码如下:
import csv
with open('test.csv','a', newline='',encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['4', '猫砂', '25', '1022', '886'])
writer.writerow(['5', '猫罐头', '18', '2234', '3121'])
写在最后:
学到这里,已经掌握了不少的知识,成为一个真正的菜鸟了。
老师建议补一部电影:《互联网之子》。
谨记格言。
编程世界它严谨但绝非枯燥,它有着一个非常崇高的精神内核——关乎自由,平等,共享,利他主义。
这是一件在人类历史上前所未有的事:曾有许多伟大人物构想过这样的社会结构,并为此做出努力,但都是不具备现实意义的乌托邦。
仰望星空到这一步的人,常会在心底埋下一颗种子:期望有一天,也能自己做出一些漂亮的轮子,给他人使用。
希望这颗种子在你心里有一天也能生根、发芽、开花、结果,让开源精神延绵不绝。