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知识库]【Python从入门到精通】(十七)Python模块和包的基本使用,简单一文,一分钟看完

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
本文主要介绍Python的模块和包,重点介绍模块和包的导入以及使用。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

模块

什么是模块呢?简单理解的话:模块就是一个后缀名是.py的模板文件。模块主要是用于封装函数和变量。我们可以将实现某一个功能的所有函数封装放在同一个.py文件中以作为一个模块提供给其他模块使用。比如操作日期的模块time。其对应模板文件就是time.py。

导入模块

导入模块的方式有两种:

  1. import 模块名1 [as 别名1], 模块名2 [as 别名2],…
    使用这种格式的import语句,会导入指定模块中所有的成员(包括变量,函数、类等)
  2. from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…
    使用这种格式的import语句,只会导入模块中指定的成员,而不是全部成员。
    用第一种方式导入time模块,可以使用该模块下所有的函数
import time

# 记录当前的毫秒数
start_time = time.time()
print(start_time)
# 睡眠4秒
time.sleep(4)
# 计算耗时
print(time.time() - start_time)

可以看出导入time之后可以使用其模块内的所有成员
用第二种方式导入time模块中的sleep函数,则time函数是使用不了的。

from time import sleep

print(sleep())

PS:如果模块名中出现空格就无法使用import引入模块了,这是因为Python 是以空格来隔离一行语句中的不同元素的。针对有空格的模块名的导入,可以通过__import__函数来导入。比如:现在有一个名为hello test.py的模板文件,可以以__import__("hello test") 这种方式导入。

自定义模块

自定义模块说白了就是自行创建一个模板文件,然后使用其文件名作为模块名导入到其他模板文件中。定义了一个名为hello的模板文件,然后在hello_test.py文件中导入。
hello.py文件

def say():
    print('苦逼程序员唱着苦逼的歌')
say()
print(__name__)

这里需要注意的是hello.py文件是放在Python项目的根目录下。
hello_test.py文件

import hello
hello.say()

运行hello_test之后,输出的结果是:

苦逼程序员唱着苦逼的歌
hello
苦逼程序员唱着苦逼的歌

我们看到输出了两遍,这显然不是我们想要的结果。我们期望的是say函数只执行一遍,也就是在hello_test调用的地方执行。而不是在hello.py文件中还执行一遍。那么这个问题该如何处理呢?

__name__控制模块方法的调用

这里可以将hello模块中调用say函数的代码块放在__name__ == '__main__'表达式中。就像下面这样:

if __name__ == '__main__':
    say()

这个__name__ == '__main__' 语句相当于Java中的main函数,他的意思是只有表达式成立时才执行say()函数,否则不执行say()函数。
当运行hello模块自身时__name__等于__main__,也就是说该表达式成立。
而当导入模块运行时__name__等于hello,也就是说此表达式不成立。当然运行其他程序时也不会执行该判断语句中的测试代码。
hello.py文件

def say():
    print('苦逼程序员唱着苦逼的歌')

print(__name__)
if __name__ == '__main__':
    say()

运行hello.py文件的结果是:

__main__
苦逼程序员唱着苦逼的歌

运行hello_test.py文件的结果是:

hello
苦逼程序员唱着苦逼的歌

可以看出say函数只被执行了一次。

Python包简单的理解就是文件夹,只不过这个文件夹下必须存在一个名为__init.py的文件。这个文件主要的作用就是告诉Python要将该目录当成一个包,可以在该文件中写一些初始化的代码。
在这里插入图片描述

包的主要作用就是方便对各个模块进行管理。因为当项目越来越大时不可能将所有的模块都放在项目的根目录下。如下图在flask-tutorial项目下就有biz,model,view这几个包。当然flask文件夹也是一个包,因为其下面也有__init__.py文件。
在这里插入图片描述

导入包

包的导入跟模块的导入类似它有三种导入方式:

  1. import 包名[.模块名 [as 别名]]
    包名就是文件的名字,通过这种方式导入包的话导入的实际上包下的**init.py文件**。能使用到的成员也就是该文件下公共的变量和函数。
  2. from 包名 import 模块名 [as 别名]
    通过这种方式导入的就是包下具体的某个模块,能实际使用的变量和函数也是该模块下所有的成员。
  3. from 包名.模块名 import 成员名 [as 别名]
    通过这种方式导入的就是包下某个模块具体的成员。

Python查找包或模块文件的顺序

这里说下Python查找模块文件的顺序:

  1. 在当前目录,即当前执行的程序文件所在的目录下查找。
  2. 到PYTHONPATH(环境变量)下的每个目录下查找
  3. 到Python默认的安全目录下查找

以上所有涉及到的目录,都保存在标准模块sys的sys.path变量中。通过此变量我们可以看到指定程序文件支持查找的所有目录。也就是说,如果要导入的模块没有存在sys.path显示的目录中,那么导入该模块并运行程序时,Python解释器就会抛出ModuleNotFoundError(未找到模块)异常。
解决"Python找不到指定模块"的方法有3种,分别是:

  1. 向sys.path中临时添加模块文件存储位置的完整路径;
  2. 将模块放在sys.path变量中已包含的模块加载路径中;
  3. 设置path系统环境变量。

当然在实际项目中通常不会这么操作。实际项目中都是先创建一个Python项目,然后设置这个项目的虚拟环境。虚拟环境指定的项目的目录为根目录 。其他包或者模块的导入只需要写入包名或者模块名即可。就像下面这样:

#导入biz包下的user_service模块
from flaskr.biz import user_service
# 导入biz包
import flaskr.biz

总结

本文详细介绍了模块和包的相关知识点,希望对读者朋友们有所帮助。

Python知识图谱

为了更好帮助更多的小伙伴对Python从入门到精通,我从CSDN官方那边搞来了一套 《Python全栈知识图谱》,尺寸 870mm x 560mm,展开后有一张办公桌大小,也可以折叠成一本书的尺寸,有兴趣的小伙伴可以了解一下------扫描下图中的二维码即可购买。

在这里插入图片描述
我本人也已经用上了,感觉非常好用。图谱桌上放,知识心中留。
在这里插入图片描述

我是码农飞哥,再次感谢您读完本文

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 11:17:17  更:2021-08-08 11:17:25 
 
开发: 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年5日历 -2024/5/17 10:00:45-

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