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的解释器在导入模块时候,会:

  1. 搜索当前目录指定模块名的文件,如果有就直接导入

  2. 如果没有,在搜索系统目录

    在开发时,给文件起名,不要和系统的模块文件重名
    

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 案例演练

  1. 新建一个hm_message的包
  2. 在目录下,新建两个send_message和receive_message
  3. 在send_message文件中定义一个send函数
  4. 在receive_message文件中定义一个receive函数
  5. 在外部直接导入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):学习笔记之模块和包相关推荐

  1. Python学习笔记:模块与包

    文章目录 一.模块与包 1.模块(Module) 2.包(Package) 二.案例演示 1.创建目录结构与相关文件 (1)pmath.py (2)PriceAnalysis.py 2.启动Spyde ...

  2. Python学习笔记:第三方模块2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记13_模块

    Python学习笔记13_模块 文章目录 Python学习笔记13_模块 1.导入模块和的方法及使用 2.分层的文件系统中常用的包结构 3.OS 模块 4.sys 模块 5.math 模块 6.ran ...

  4. Python学习笔记:模块

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. python学习笔记7-模块、包

    本节学习内容有: 模块 模块的导入 包 包的导入 一.模块 1.什么是模块? 模块,在python中就是一个文件,包含了python定义和声明的文件,文件名就是模块名加上.py的后缀. 2.为什么要使 ...

  6. python学习--类、模块、包

    目录 面向对象编程思想 类的特点 类的定义 类的变量 类的方法 类中的方法 类方法 静态方法 实例方法 类的继承 子类的定义 覆写父类的方法 私有化 下划线相关变量命名 模块 包 面向对象编程思想 类 ...

  7. Python学习笔记:虚拟环境和包

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构 ...

  8. Python学习笔记011_模块_标准库_第三方库的安装

    容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...

  9. Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数

    一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...

  10. Python学习笔记——glob模块【文件、路径操作】

    最近做了一个将dicom文件转化为mhd文件的任务,由于要进行批量转化所以遍历文件夹必不可少,刚开始学习python编程,所以把用过的模块用法记录下来,以加深记忆,方便查阅,最后参考前人的博客做了gl ...

最新文章

  1. python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)
  2. 财务造假丑闻后,瑞幸遭大股东清仓股份,CEO和COO双双被停职
  3. 好心酸!三星可折叠屏手机Galaxy Fold下月也无法发货
  4. 详细说明自学Python需要具备什么?
  5. OSC源创会【放码过来】环节精彩回顾
  6. 创维广电服务器无线,创维电视与电脑无线投屏条件
  7. Java 进制转换函数
  8. matlab实现螺旋谱分解,MATLAB实现EMD分解及希尔伯特谱分析
  9. 关于区块链的一些特有技术
  10. 如何将多个Excel 表合并成一个
  11. JHOST邀请码,2012年7月31日申请,2012年8月31日过期
  12. Dynamic CRM 2016 IFD配置(1)证书颁发机构配置
  13. CAPI 初探及使用小结(4)
  14. [转]SSD:Single Shot Detector详解
  15. PMP快速通过经验分享
  16. 阿里云漏洞验证需要付费的解决方法
  17. 鸽传书2007是一个局域网通信软件
  18. MySQL mysqld dead but subsys locked的解决办法_张童瑶的博客
  19. python怎么模拟鼠标移动点击_Python模拟鼠标点击——如何正确的肝阴阳师
  20. --i和i--的区别

热门文章

  1. 33.错误处理(2)
  2. 6.Linux 运行级别
  3. 19. 网购秒杀系统架构分析
  4. 4. laravel 路由(1)
  5. 蒟蒻7.16题解(选值+遛狗+树上博弈)
  6. ~~~~练习~~~~用户登录(三次机会重试)
  7. 关于fineui中在gird中插入按钮的知识
  8. python输入输出基本点
  9. 对application/x-www-form-urlencoded、multipart/form-data和text/plain的认识
  10. 聚合函数和group by