Python学习笔记 | 模块

基于Python3版本的学习。

模块

模块是最高级别的程序组织单元。
在模块中,我们不但可以直接存放变量,还能存放函数,还能存放类。

定义变量需要用赋值语句;
封装函数需要用def语句;
封装类需要用class语句;
封装模块不需要任何语句。

之所以不用任何语句,是因为每一份单独的Python代码文件(后缀名是.py的文件)就是一个单独的模块。


建立模块

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

import语句

我们使用import语句导入一个模块,最主要的目的并不是运行模块中的执行语句,而是为了利用模块中已经封装好的变量、函数、类。

# test.py

a = '我是模块中的变量a'

def hi():
    a = '我是函数里的变量a'
    print('函数“hi”已经运行!')

class Go2:
    a = '我是类2中的变量a'
    def do2(self):
        print('函数“do2”已经运行!')

print(a)  # 打印变量“a”

hi()  # 调用函数“hi”

A = Go2()  # 实例化“Go2”类
print(A.a)  # 打印实例属性“a”
A.do2()  # 调用实例方法“do2”
# main.py

import test  # 导入test模块

print(test.a)  # 使用“模块.变量”调用模块中的变量

test.hi()  # 使用“模块.函数()”调用模块中的函数

A = test.Go2()  # 使用“变量 = 模块.类()”实例化模块中的类
print(A.a)  # 实例化后,不再需要“模块.”
A.do2()  # 实例化后,不再需要“模块.”

运行结果:

我是模块中的变量a
函数“hi”已经运行!
我是类2中的变量a
函数“do2”已经运行!

import语句还有一种用法是import…as…

上面的案例中,main.py文件可以写成这样:

# main.py

import test as t  # 导入test模块

print(t.a)  # 使用“模块.变量”调用模块中的变量

t.hi()  # 使用“模块.函数()”调用模块中的函数

A = t.Go2()  # 使用“变量 = 模块.类()”实例化模块中的类
print(A.a)  # 实例化后,不再需要“模块.”
A.do2()  # 实例化后,不再需要“模块.”

当我们需要同时导入多个模块时,可以用逗号隔开。
比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件。

import a,b,c

from … import … 语句

from … import …语句可以让你从模块中导入一个指定的部分到当前模块。
格式如下:
from (模块名) import(指定模块中的变量名/函数名/类名)

1、导入模块中的指定部分(变量名/函数名/类名)
2、导入后的指定部分可以直接使用,无需加上“模块.”前缀

# 【文件:test.py】
def hi():
    print('函数“hi”已经运行!')

# 【文件:main.py】
from test import hi  # 从模块test中导入函数“hi”
hi()  # 使用函数“hi”时无需加上“模块.”前缀

当我们需要从模块中同时导入多个指定内容,也可以用逗号隔开,写成from xx模块 import a,b,c的形式。
对于from … import …语句要注意的是,没有被写在import后面的内容,将不会被导入。

if __ name__ == ’ __ main __ ’

当我们有了一大堆py文件组成一个程序的时候,为了【指明】某个py文件是程序的运行入口,我们可以在该py文件中写出这样的代码:

# 【文件:xx.py】

代码块 ①……

if __name__ == '__main__':
    代码块 ②……

当xx.py文件被直接运行时,代码块②将被运行。
当xx.py文件作为模块是被其他程序导入时,代码块②不被运行。


使用他人的模块

Python的系统内置模块 ,如time模块和random模块,Python安装后就准备好了这些模块供你使用。
如果是第三方编写的模块,我们需要先从Python的资源管理库下载安装相关的模块文件。

自学模块

学习模块的核心是搞清楚模块的功能,也就是模块中的函数类方法 有什么作用,以及具体使用案例长什么样。

学会百度搜索模块教程,搜到教程后,我们重点关注的是模块中的函数和类方法有什么作用,然后把使用案例做成笔记。

例如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)

我们还可以使用dir()函数 查看一个模块,看看它里面有什么变量、函数、类、类方法。

总结一下模块的学习方法,其实可以归纳成三个问题:

问题 解决方法
这模块有哪些函数可用? 可以通过dir()函数查询。
有哪些属性或方法可用? 去网上看文档或找教程
使用格式是什么? 从文档或教程中搜集案例

学习csv模块

csv 是一种文件格式,你可以把它理解成“简易版excel”。学会了csv模块,你就可以用程序处理简单的电子表格了。

如果要手动新建csv文件,我们可以先新建一个excel表格,然后选择另存为“csv”格式即可。
同样的,当我们有了一张csv格式的表格,我们也可以选择另存为“excel”格式。

下面继续学习如何用csv模块读写csv文件。
我们使用import语句导入csv模块,然后用dir()函数看看它里面有什么东西。

同时,我们可以搜索到csv模块的官方
英文教程:https://docs.python.org/3.6/library/csv.html
中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv

读取CSV文件的最简单示例:

import csv
with open('some.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

相应的最简单的写入示例是:

import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)

由于open()用于打开要读取的CSV文件,因此默认情况下该文件将使用系统默认编码解码为unicode 。要使用不同的编码对文件进行解码,请使用open的encoding参数:

import csv
with open('some.csv', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

注册新方言:

import csv
csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
with open('passwd', newline='') as f:
    reader = csv.reader(f, 'unixpwd')

稍微更高级的使用读者 - 捕获和报告错误:

import csv, sys
filename = 'some.csv'
with open(filename, newline='') as f:
    reader = csv.reader(f)
    try:
        for row in reader:
            print(row)
    except csv.Error as e:
        sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))

你可能感兴趣的:(Python学习笔记)