Python-十三、模块

1、什么是模块

首先我们回顾一下类的结构。
类:
-----函数;
-----变量。

模块呢?
模块是最高级别的程序组织单元。
则模块的结构是这样的。
模块
-------函数
-------变量
--------------类
--------------函数
--------------变量

模块是最高级别的程序组织单元

封装模块的目的也是为了把程序代码和数据存放起来以便再次利用。如果封装成类和函数,主要还是便于自己调用,但封装了模块,我们不仅能自己使用,文件的方式也很容易共享给其他人使用。

使用模块主要有两种方式,一种是自己建立模块并使用,另外一种是使用他人共享的模块。

2、使用自己的模块

建立模块,其实就是在主程序的py文件中,使用import语句导入其他py文件。

2.1、import语句

我们使用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 …语句可以让你从模块中导入一个指定的部分到当前模块。

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模块,我们可以看到其结构如下图:

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

通过阅读实例,我们可以掌握一些简单的用法:

简单的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数据

写入csv数据的语法

先创建一个变量名为writer(也可以是其他名字)的实例,创建方式是writer = csv.writer(x),然后使用writer.writerow(列表)就可以给csv文件写入一行列表中的内容。

还是上面的test.csv中的上品数据,我们尝试用writerow()方法为它追加写入两行列表:['4', '猫砂', '25', '1022', '886']、['5', '猫罐头', '18', '2234', '3121']。

思路,首先我们需要回忆open函数中是如何做读、写、追加的。

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'])

写在最后:

学到这里,已经掌握了不少的知识,成为一个真正的菜鸟了。

老师建议补一部电影:《互联网之子》。

谨记格言。


时代周刊的格言
腾讯传的格言

编程世界它严谨但绝非枯燥,它有着一个非常崇高的精神内核——关乎自由,平等,共享,利他主义。

这是一件在人类历史上前所未有的事:曾有许多伟大人物构想过这样的社会结构,并为此做出努力,但都是不具备现实意义的乌托邦。

仰望星空到这一步的人,常会在心底埋下一颗种子:期望有一天,也能自己做出一些漂亮的轮子,给他人使用。

希望这颗种子在你心里有一天也能生根、发芽、开花、结果,让开源精神延绵不绝。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容