目录
Python之第八章 模块和包 --- 模块
1.模块
1.定义:
将实现某一特定功能的代码放置在一个文件中,以便于其他程序进行导入使用,可以避免函数名、变量名的冲突,改文件称为模块,扩展名为.py
模块 --- 可以将其堪称包含变量或一组方法的Python文件对象,或者多个Python文件对象组成的目录。
2.作用:
- 模块 = 函数+类+变量
- 程序规模不断变大需要分为多个文件,以提高维护性
- 模块可以重复导入,提高重用性
3.分类
内置模块 --- 当前使用,Python内置模块大概有200多个标准模块,如:
模块名 | 用途 |
---|---|
time | 时间模块 |
urllib | 读取互联网服务的标准库 |
math | 数学类 |
re | 正则 |
sys | 解释器以及系统相关 |
自定义模块 --- 第三方模块
4.模块导入的常见方法:五种
- import 模块名
- from 模块名 import 功能名
- from 模块名 import * --- 相当于第一种
- import 模块名 as 命别名
- from 模块名 import 功能名 as 别名
5.使用import导入模块
import 模块名
import 模块名1,模块名2,...,模块名n(导入多个模块)
import math
print(math.sqrt(9))
结果:
3.0
6.使用from...import语句导入模块
作用 --- 使用import导入模块时,如果只需要部分函数可以通过from语句实现
注意:
使用时不需要增加模块名前缀
from math import sqrt, floor
print(sqrt(9), floor(10.88))
结果:
3.0 10
7.使用as关键字为导入模块定义别名
原因 --- 某种情况下模块名称过长,建议使用as命名一个较为短的新名称,调用时使用新名称进行操作
import time as t
print('hello')
t.sleep(3)
print('world')
注意:
使用from..import导入的模块必须保证导入内容名称唯一,若导入的模块有相同的变量、函数、类则会覆盖之前导入的同名内容,因此需要检查,别名应简洁
8.自定义模块
作用 --- 将相关的代码写在一个单独的文件中,并命名为 ‘模块’.py --- 自行创建的模块名称不能与标准库中的模块名重名
例1 新建一个模块文件,实现素数的判断
1.在当前目录下新建文件prime.py
2.输入代码后保存退出
def fun_prime(num):
if num < 2:
print('输入错误,请输入大于2的整数')
else:
for i in range(num):
if num % 2 == 0:
return 0
else:
return 1
# 找出一百以内的素数
import prime as pe
a = 0
print('一百以内的素数为:')
for i in range(2, 100):
if pe.fun_prime(i) == 1:
print(i, end=' ')
a += 1
if a == 10:
print()
a = 0
自定义模块的功能测试
作用 --- 在编写完自定义模块以后,最好在模块中对代码进行提前测试,以防止抛出异常
模方方法 --- _ _ name _ _ --- 每个模块的定义中都包含一个记录模块名称的字符串变量( _ _ name _ _),随着运行的页面不同,返回不同。
当前页面执行 --- 返回结果为 _ _ main _ _
print(__name__)
def fun_prime(num):
'''
判断输入的数字是否为素数
:param num: 输入的数字
:return: 0 表示该数不是素数 1 表示该数为素数
'''
if num < 2:
print('输入错误,请输入大于2的整数')
else:
for i in range(num):
if num % 2 == 0:
return 0
else:
return 1
结果:
_ _main_ _
在其他文件调用执行 --- 输出模块文件名 --- _ _ 模块名_ _
# 找出一百以内的素数
import prime as pe
a = 0
print('一百以内的素数为:')
for i in range(2, 100):
if pe.fun_prime(i) == 1:
print(i, end=' ')
a += 1
if a == 10:
print()
a = 0
结果:
prime
一百以内的素数为:
3 5 7 9 11 13 15 17 19 21
23 25 27 29 31 33 35 37 39 41
43 45 47 49 51 53 55 57 59 61
63 65 67 69 71 73 75 77 79 81
83 85 87 89 91 93 95 97 99
Process finished with exit code 0
结论 --- 模块自行测试如下:
print(__name__) def fun_prime(num): ''' 判断输入的数字是否为素数 :param num: 输入的数字 :return: 0 表示该数不是素数 1 表示该数为素数 ''' if num < 2: print('输入错误,请输入大于2的整数') else: for i in range(num): if num % 2 == 0: return 0 else: return 1 # 进行函数测试 if __name__ == '__main__': # 若果是当前页面执行 if fun_prime(5): print('素数') else: print('平数') #此时不需要其他程序就可以在文本文件中执行测试
注意:
_ _ name _ _ --- 一般用于自定义模块测试,还可以用于编写程序的入口:
def main(): #执行的功能 #打印的功能 #增删的功能 #调用 if _ _name_ _ == '_ _main_ _'
9.模块搜索目录
当使用import语句导入模块时,默认情况会按照以下情况查找
- 执行Python文件的当前目录
- Pythonpath(环境变量)
- Python解释器安装目录
通过代码查看 --- sys.path --- 检索目录
import sys
print(sys.path)
结果:
['E:\\pythontext', 'E:\\pythontext', 'E:\\pthon\\PyCharm 2020.1\\plugins\\python\\helpers\\pycharm_display', 'E:\\pthon\\python39.zip', 'E:\\pthon\\DLLs', 'E:\\pthon\\lib', 'E:\\pthon', 'E:\\pythontext\\venv', 'E:\\pythontext\\venv\\lib\\site-packages', 'E:\\pthon\\lib\\site-packages', 'E:\\pthon\\PyCharm 2020.1\\plugins\\python\\helpers\\pycharm_matplotlib_backend']