IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python学习日记-第十九天- 模块、包 -> 正文阅读

[Python知识库]Python学习日记-第十九天- 模块、包

系列文章目录

?一、模块

二、包


一、模块

1.1? ?模块的概念

模块是Python程序框架的一个核心概念

·每一个扩展名 py 结尾的Python源代码文件都是一个模块

·模块名同样也是一个标识符,需要符合标识符的命名规则

·在模块中定义的全局变量、函数、类 都是提供给外界直接使用的工具

·模块就好比工具包,要想使用这个工具包的工具,需要用import 导入这个模块

1.2? ?模块的两种导入方式

1) import导入

???(注:在导入时,每隔导入应该独占一行)

导入之后,通过 ?模块名. 的方式使用模块提供的工具——全局变量、函数、类

下面是练习:

首先准备两个测试模块

模块一:

?模块二:

?再用 import 导入:

?

?

扩展:import导入

如果摸一个模块的名字太长,或者非常不好识别,可以使用 as 指定模块的别名

语法:

import 模块名1 as 模块别名

(注意:模块别名要符合大驼峰命名法)

这个为了我们编写代码的时候自己方便?

2)from..import 导入

·如果希望从某一个模块中,导入部分工具,就可以使用 from...import

·import 模块名 是一次性把木块中虽有的工具全部导入,并且通过模块名/别名访问

·导入之后,不需要通过 模块名. ?可以直接使用模块提供的工具——全局变量、函数、类

?注:(from...import 导入方式,可以直接使用工具,不需要像之前import 导入那样,使用模块名. 的方式)

下面是使用 from...import导入时,需要注意的事项:

注(如果两个模块存在同名的函数,那么 后导入的函数,会覆盖先导入的函数,所以在开发时 import 代码应该统一写在代码顶部,这样更容易我们第一时间发现冲突,一旦发现冲突,可以时使用 as 关键字 给其中一个工具名起一个别名)

?注意看,pycharm会智能把模块二 高亮,就是提醒会执行模块二

下面是起了别名的操作:

?这样就可以避免冲突

补充知识点: from...import* (这个只需要了解,不推荐,因为函数名重名,并没有任何提示,出现问题不好排查,只能平时私底下做一下就行)

下面是正常的导入:

?输出结果:

在没有出现重名的情况下,还是非常实用的

?下面是有重名的情况:

因为之前模块一和模块二的 全局变量title 和 函数say hello 都是重名的,所以下面的输出结果自动就输出了模块二的,并且没有扔个提示,在平时开发中,就很难排查,所以不推荐在公司开发使用,自己平时私底下偷懒可以用一下

1.3? ? 模块的搜索顺序(扩展)

Python 的解释器 在导入模块时会:

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

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

Python 中每一个模块都有一个内置属性 __file__可以查看模块的 完整路径

示例:

import random

#生成一个0-10的数字

rand = random.randint(0, 10)

print(rand)

注意:如果当前目录下,存在一个 random.py 的文件,程序会无法正常执行

·这个时候Python的解释器会加载当前目录下的 random.py 而不会加载系统的 random模块

?因为我们在里面建立了一个 random.py 的空白文件,Python的解释器会优先加载当前目录下的空白 random.py,而不会去加载原本系统的,因为我们创建的只是一个没有任何作用空白的文件,所以系统就会报错

下面可以用 __file__ ?再进一步验证:

?系统会输出当前我们加载的 random 模块保存的位置,然后点击删除就可以了正常运行了

?删除之后:

解释器会告诉我们新的random 是Python系统的

下面程序就可以正常运行了:

?代码:

import random
print(random.__file__)

rand = random.randint(0, 10)

print(rand)

小结:平时给文件起名时,千万切记不要和系统的模块文件 重名

1.4? ?开发原则——每一个文件都应该是可以被导入的

·一个独立的Python 文件就是一个模块

·导入问价时,文件中所有没有任何缩进的代码,都会被执行一遍

实际开发场景

·在实际开发中,每一个模块都是独立开发的,大多都有专人负责

·开发人员 通常会在模块下方 增加一些测试代码

??仅在模块内使用,而被导入到其他文件中不需要执行

__name__属性

·__name__属性可以做到,测试模块的代码 只在测试情况下被执行,而在被导入时不会被执行

·__name__ 是 Python 的一个内置属性,记录这一个字符串

·如果 是被其他文件导入的,__name__ 就是模块名

·如果 是当前执行的程序__name__ 是__main__

下面是练习:

先创建一个模块:

?代码:

# 全局变量、函数、类,注意:直接执行的代码不是向外界提供的工具!!!

def say_hello():
    print("你好")

#如果直接执行模块
print(__name__)

# 问价导入时,能够直接执行的代码是不需要在导入模块中被执行的
print("小明开发的模块")
say_hello()

输出结果:

?如果直接在当前程序执行 __name__ ?下面输出的结果永远都是__main__

下面是导入模块:

?输出结果:

?输出的直接是模块的名称,而不是__main__

下面是具体的操作:

?要增加一个__name__ == __main__的判断

代码:

# 全局变量、函数、类,注意:直接执行的代码不是向外界提供的工具!!!

def say_hello():
    print("你好")

#如果直接执行模块,__main__
if __name__ == "__main__":
    print(__name__)

    # 问价导入时,能够直接执行的代码是不需要在导入模块中被执行的
    print("小明开发的模块")
say_hello()

在导入模块输出的结果:

?总结:如果我们需要测试模块,就增加一个条件判断,在条件下方针对模块进行测试,这样在开发模块时能够顺利的对模块进行测试,而且测试的内容,被其他人导入后,不会被执行,不会影响后续代码拼接过后的运行结果


二、包(package)

概念

·包是一个包含多个模块的特殊目录

·目录下有一个特殊的文件 __init__.py

·包名的命名方式和变量名一致,小写字母+ 下划线 _

优点

·使用 import 包名 可以一次性导入包中所有模块

案例演练:

  1. 新建一个 pl_massage 的包
  2. 在目录下,新建两个文件 send_massage 和 receive_massage
  3. 在 send_massage 文件中定义一个 send 函数
  4. 在 receive_massage 文件中 定义一个 receive 函数
  5. 在外部直接导入pl_massage 的包

__init__.py

·要在外界使用包中的模块,需要在__init__.py 中指定 对外界提供的模块列表

下面是建立包:

取好名字即可

创建好包之后,pycharm 会自动创建一个 __init__.py 的文件

?下面是在包中,建立2.两个文件 send_massage 和 receive_massage

?然后是封装好两个函数

?

?

下面是重点:一定要先在__init__.py 这个特殊文件中,把外界需要使用的模块,通过下面的使用 from . import 的语法,逐一导入

接下来就是在之前创建好的导入包文件中,进行导入包

?

?下面是输出结果:

?


总结

1.? ?模块的导入:1)import导入,如果有重名,就需要使关键字用as 取个别名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?使用的时候用 模块. 的方法 使用导入的 全局变量、函数和类

? ? ? ? ? ? ? ? ? ? ? ? ? ?2)from...import 导入,使用的时候直接用就可以,同样出现重名,使用关键字? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?as 取别名

2.? ?包的导入:关键就是导入之前,一定要在__init__.py,这个特殊文件里面把外界需要使用的模块,通过使用 from . import 的语法,逐一导入

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:28:59  更:2022-10-17 12:32:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 1:55:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计