python笔记——模块与包
Posted 联邦学习小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记——模块与包相关的知识,希望对你有一定的参考价值。
模块
1、定义:在python中一个扩展名为.py的文件就是一个模块
2、结构:一个python程序有多个模块(.py文件),一个模块可以包含多个函数、类和语句。
3、使用模块的好处
- 方便其他程序和脚本的导入和使用(不用在意内部细节)。
- 每个模块可由不同人员开发,非常便于团队开发,提高效率。
- 避免函数名和变量名的冲突。
- 提高代码的可维护性(哪个模块有问题就改哪个,其他无需改变)。
- 提高代码的可重用性(多次调用)。
自定义模块
1、创建模块
新建一个.py文件,名称尽量不要于python自带的标准模块名称相同。
2、导入自定义模块报错?
在所创建的程序目录中选择Sources Root即可
3、导入模块
- 导入整个模块:import 模块名称 [as 别名]
- 只导入模块的一个函数/变量/类:from 模块名称 import 函数/变量/类
使用上的区别:若是导入整个模块,则必须用模块名.函数/变量/类来调用,若是只导入某个函数/变量/类,则可以直接使用。
import math
print(math.pi) #3.141592653589793
print(math.pow(2,3)) #8.0
______________________________________________
from math import pi
print(pi) #3.141592653589793
print(math.pow(2,3)) #报错
4、以主程序形式运行
在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量的值为__main__
说白了就是在每个模块中加上if name == ‘main’:。把只在运行这个模块才需要执行的代码写到里面去,防止别的模块导入它时执行了该模块的这些代码。
if __name__ == 'main':
#写在这里的代码只有在运行这个模块时才会执行,别的模块导入此模块时不会触发这里的代码。
pass
下面这个程序就是模块demo1不把输出函数限制在本模块执行,可以看到,demo2导入模块demo1时,执行了demo1中的输出函数,这有时是我们不愿看到的。
#demo1
def add(a,b):
return a+b
print(add(10,20))
#demo2
import demo1
print(demo1.add(100,200)) #30 300
只需加上一条语句,就可以限制demo1的输出在本模块中执行
#demo1
def add(a,b):
return a+b
if __name__ == main:
print(add(10,20))
#demo2
import demo1
print(demo1.add(100,200)) #300
包
1、定义:包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
2、作用:
- 代码规范
- 避免模块名称冲突
3、包package与目录directory的区别
- 包含__init__.py文件的目录称为包
- 目录里通常不包含__init__.py文件
4、导入其他包的模块:
- 使用import方式导入时,只能导入包或模块:import 包名(.模块名) 【as 别名】
- 使用from … import可以导入包/模块/函数/变量/类:from 包名(.模块名) import (模块名)/函数/变量/类
python中常用的内置模块
模块名 | 描述 |
---|---|
sys | 与Python解释器及其环境操作相关的标准库 |
time | 提供与时间相关的各种函数的标准库 |
os | 提供了访问操作系统服务功能的标准库 |
calendar | 提供与日期相关的各种函数的标准库 |
urllib | 用于读取来自网上(服务器)的数据标准库 |
json | 用于使用JSON序列化和反序列化对象 |
re | 用于在字符串中执行正则表达式匹配和替换 |
math | 提供标准算术运算函数的标准库 |
decimal | 用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算 |
logging | 提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能 |
以上是关于python笔记——模块与包的主要内容,如果未能解决你的问题,请参考以下文章