面向对象(Python):学习笔记之模块和包
01. 模块
1.1 模块的概念
模块是Python程序架构的一个核心概念
- 每一个扩展名以py结尾的python源代码文件都是一个模块
- 模块名同样也是一个标识符,需要符合标识符的命名规则
- 在模块中定义的全局变量,函数,类这些都是提供给外界直接使用的工具
- 模块就好比是工具包,想要使用这个工具包中的工具,就需要先导入这个模块
1.2 模块的两种导入方式
1.2.1 import导入
import 模块1,模块2
提示: 在导入模块时候,每个导入应该独占一行
import 模块1
import 模块2
导入之后
通过模块名.使用模块提供的工具—全局变量 函数 类
使用as指定模块的别名
如果模块的名字太长,可以使用as指定模块的别名,以便在代码中使用
import 模块1 as 模块别名
注意:模块别名应该符合大驼峰命名法
# test
# 全局变量
title = "模块1"# 函数
def say_hello():print("你好,我是 %s" % title)# 类
class Dog(object):pass# test2
# 全局变量
title = "模块2"# 函数
def say_hello():print("你好,我是 %s" % title)# 类
class Cat(object):pass# main
import test as DogMoudle
import test2 as CatMoudleDogMoudle.say_hello()
CatMoudle.say_hello()dog = DogMoudle.Dog()
print(dog)
cat = CatMoudle.Cat()
print(cat)
运行结果:
1.2.2 from…import 导入
- 如果希望从某一个模块中,导入部分工具,可以使用from…import
- import模块名是一次性把模块中所有工具全部导入,并且通过模块名/别名访问
# 从模块导入某一个工具
from 模块名1 import 工具名
- 导入后不需要通过模块名.
- 可以直接使用模块提供的工具—全局变量 函数 类
注意:如果两个模块,存在同名函数,那么后导入模块的函数,会覆盖掉先导入的函数
- 开发时候,import代码应该统一写在代码的顶部,更容易及时发现冲突
- 一旦发现冲突,可以使用as关键字给其中一个工具起一个别名
from test import Dog
from test2 import say_hellosay_hello()
dog = Dog()
print(dog)
运行结果:
1.2.3 from …import *
# 从模块导入所有工具
from 模块1 import *
注意:这种方式不推荐使用,因为函数重名没有任何提示,出现问题不好排查
1.3 模块的搜索顺序
Python的解释器在导入模块时候,会:
搜索当前目录指定模块名的文件,如果有就直接导入
如果没有,在搜索系统目录
在开发时,给文件起名,不要和系统的模块文件重名
python中,每一个模块都有一个内置属性__file__可以查看模块的完整路径
示例:
import random
# 随机生成0~9的数字
rand = random.randint(1,10)
print(rand)
注意:如果在当前的目录下,存在一个random.py,程序就无法正常运行了
- 这个时候,Python解释器会加载当前目录下的random.py而不加载系统中的random模块
1.4 原则—每一个文件都应该是可以被导入的
- 一个独立的Python文件就是一个模块
- 在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍
实际开发场景
- 在实际开发中,每个模块都是独立开发的,大多有专人负责
- 开发人员通常会在模块下方增加一些测试代码
仅在模块内使用,而被导入其他文件中不需要执行
__name__属性
- __name__属性可以做到,测试模块的代码旨在测试情况下被运行,而在被导入的时候不会执行
- __name__是Python的一个内置属性,记录着一个字符串
- 如果是被其他文件导入的,__name__就是模块名
- 如果是当前执行的程序,name__是__main
VS
即:测试代码上方可以加上一行 “if __name__ == “__main__””
02. 包(Package)
2.1 包的概念及好处
概念
- 包是一个包含多个模块的特殊目录
- 目录下有一个特殊的文件__init__.py
- 包名的命名方式和变量名一直,小写字母+ _
好处
- 使用import 包名可以一次性导入包中所有的模块
在Pycharm中两种建包方式
①新建目录Directory,在目录下自己新建__init__.py
②新建Python Package,自动生成__init__.py
2.2 案例演练
- 新建一个hm_message的包
- 在目录下,新建两个send_message和receive_message
- 在send_message文件中定义一个send函数
- 在receive_message文件中定义一个receive函数
- 在外部直接导入hm_message的包
# send_message.py
def send(text):print("正在发送 %s " % text)
# receive_message.py
def receive():return "这是来自100××的短信"
# __init__.pu
from . import receive_message
from . import send_message
# study.py
import hm_messagehm_message.send_message.send("hello")
receive = hm_message.receive_message.receive()
print(receive)
运行结果:
面向对象(Python):学习笔记之模块和包相关推荐
- Python学习笔记:模块与包
文章目录 一.模块与包 1.模块(Module) 2.包(Package) 二.案例演示 1.创建目录结构与相关文件 (1)pmath.py (2)PriceAnalysis.py 2.启动Spyde ...
- Python学习笔记:第三方模块2
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记13_模块
Python学习笔记13_模块 文章目录 Python学习笔记13_模块 1.导入模块和的方法及使用 2.分层的文件系统中常用的包结构 3.OS 模块 4.sys 模块 5.math 模块 6.ran ...
- Python学习笔记:模块
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- python学习笔记7-模块、包
本节学习内容有: 模块 模块的导入 包 包的导入 一.模块 1.什么是模块? 模块,在python中就是一个文件,包含了python定义和声明的文件,文件名就是模块名加上.py的后缀. 2.为什么要使 ...
- python学习--类、模块、包
目录 面向对象编程思想 类的特点 类的定义 类的变量 类的方法 类中的方法 类方法 静态方法 实例方法 类的继承 子类的定义 覆写父类的方法 私有化 下划线相关变量命名 模块 包 面向对象编程思想 类 ...
- Python学习笔记:虚拟环境和包
本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构 ...
- Python学习笔记011_模块_标准库_第三方库的安装
容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...
- Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数
一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...
- Python学习笔记——glob模块【文件、路径操作】
最近做了一个将dicom文件转化为mhd文件的任务,由于要进行批量转化所以遍历文件夹必不可少,刚开始学习python编程,所以把用过的模块用法记录下来,以加深记忆,方便查阅,最后参考前人的博客做了gl ...
最新文章
- python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)
- 财务造假丑闻后,瑞幸遭大股东清仓股份,CEO和COO双双被停职
- 好心酸!三星可折叠屏手机Galaxy Fold下月也无法发货
- 详细说明自学Python需要具备什么?
- OSC源创会【放码过来】环节精彩回顾
- 创维广电服务器无线,创维电视与电脑无线投屏条件
- Java 进制转换函数
- matlab实现螺旋谱分解,MATLAB实现EMD分解及希尔伯特谱分析
- 关于区块链的一些特有技术
- 如何将多个Excel 表合并成一个
- JHOST邀请码,2012年7月31日申请,2012年8月31日过期
- Dynamic CRM 2016 IFD配置(1)证书颁发机构配置
- CAPI 初探及使用小结(4)
- [转]SSD:Single Shot Detector详解
- PMP快速通过经验分享
- 阿里云漏洞验证需要付费的解决方法
- 鸽传书2007是一个局域网通信软件
- MySQL mysqld dead but subsys locked的解决办法_张童瑶的博客
- python怎么模拟鼠标移动点击_Python模拟鼠标点击——如何正确的肝阴阳师
- --i和i--的区别