大家一起进步,一起加油,感谢大家的支持和关注。
文章目录
必须会,还得很熟很熟的那种
模块
在Python中,模块(Module)是指一个包含了函数、变量和类等定义的文件,而包(Package)是指包含了多个模块的目录。
模块本质上就是一个py文件
模块介绍
模块一共有三种:
- python标准库
- 第三方模块
- 应用程序自定义模块
导入模块语法
导入模块关键点
- 模块与包的命名遵从小写+下划线
- 导入的模块名和函数一样是一等公民
- “一等公民”(first-class citizen)是指某个实体(通常是数据类型或值)具有与其他实体相同的权利和特权。它表示在语言中,这些实体可以被像任何其他实体一样对待,可以作为参数传递给函数、赋值给变量、存储在数据结构中,以及作为函数的返回值
- 使用“import module导入模块的本质就是,将 module.py 中的全部代码加载到内存并执行,然后将整个模块内容赋值给与模块同名的变量
- 导入同一个模块多次,Python只执行一次
- 在导入模块后,可以在模块文件所在目录下看到一个名为“pycache”的文件夹,打开该文件夹,可以看到 Python 为每个模块都生成一个 *.cpython-3x.pyc 文件,该文件其实是 Python 为模块编译生成的字节码,用于提升该模块的运行效率。
导入模块语法
import 模块名1 [as 别名1], 模块名2 [as 别名2],…
:使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…
: 使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。同时,当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。- import 语句也可以导入指定模块中的所有成员,即使用 form 模块名 import *,但此方式不推荐使用。
__all__
可以控制*
__name__=='__main__'
if __name__ == '__main__':
的作用是确保只有单独运行该模块时,此表达式才成立,才可以进入此判断语法,执行其中的测试代码;反之,如果只是作为模块导入到其他程序文件中,则此表达式将不成立,运行其它程序时,也就不会执行该判断语句中的测试代码。
循环导入会出bug
包
什么是包
一个大型的项目往往需要使用成百上千的Python模块,如果将这些模块都堆放在一起,势必不好管理。而且,使用模块可以有效避免变量名或函数名重名引发的冲突,但是如果模块名重复怎么办呢?因此,Python提出了包(Package)的概念。
包就是文件夹,只不过在该文件夹下必须存在一个名为“__init__.py
” 的文件,其作用就是告诉 Python 要将该目录当成包来处理
创建包
两步
- 创建文件夹
- 在下面创建一个名叫
__init__.py
的文件 - 可以在包中添加模块,也可以创建包
了解一下django框架里面的包结构
导包语法
import 包名[.模块名 [as 别名]]
from 包名1.包名2 import 模块名 [as 别名]
from 包名1.包名2.模块名 import 成员名 [as 别名]
用 [] 括起来的部分,是可选部分,即可以使用,也可以直接忽略。
导入模块和包本质
通常情况下,当使用 import 语句导入模块后,Python 会按照以下顺序查找指定的模块文件:
- 在当前目录,即当前执行的程序文件所在目录下查找;
- 到 PYTHONPATH(环境变量)下的每个目录中查找;
- 到 Python 默认的安装目录下查找。
以上所有涉及到的目录,都保存在标准模块 sys 的 sys.path 变量中,通过此变量我们可以看到指定程序文件支持查找的所有目录。换句话说,如果要导入的模块没有存储在 sys.path 显示的目录中,那么导入该模块并运行程序时,Python 解释器就会抛出 ModuleNotFoundError(未找到模块)异常。
解决“Python找不到指定模块”的方法有 3 种,分别是:
- 向 sys.path 中临时添加模块文件存储位置的完整路径;
- 将模块放在 sys.path 变量中已包含的模块加载路径中;
- 设置 path 系统环境变量。
功能模块导入功能 模块,import
__init__.py
为了调用包内模块的成员(变量、函数或者类),代码中包含了诸多的 import 导入语句,非常繁琐。通过在 __init__.py
文件使用 import 语句将必要的模块导入,这样当向其他程序中导入此包时,就可以直接导入包名,也就是使用import 包名
(或from 包名 import *
)的形式即可。
虚拟环境
- 隔离依赖:每个项目可以有自己的依赖库,不同项目之间的依赖冲突不会发生。
- 简化部署:可以将项目的依赖库和运行环境一起打包,方便在其他计算机上部署和运行。
- 灵活性:可以在不同的项目中使用不同的 Python 版本,以满足项目的特定需求。
创建虚拟方式一
在 Python 3.3 及以后的版本中,Python 内置了 venv
模块,用于创建和管理虚拟环境。以下是使用 venv
模块创建和激活虚拟环境的基本步骤:
- 创建虚拟环境:
打开终端(命令行),进入你想要创建虚拟环境的目录,然后运行以下命令:
# 这是 Python 内置的 venv 模块的命令语法。
# 它通过调用 Python 解释器的 -m 参数来执行 venv 模块内建的创建虚拟环境的功能。
python3 -m venv <env_name>
- 激活虚拟环境:
在终端中运行以下命令来激活虚拟环境:
# 在 macOS/Linux 系统上:
source myenv/bin/activate
# 在 Windows 系统上:
myenv\Scripts\activate
激活虚拟环境后,终端的提示符会显示虚拟环境的名称。
-
使用虚拟环境:
在激活的虚拟环境中,你可以安装和管理项目所需的依赖库,运行项目的代码等。所有的操作都将在虚拟环境中进行,不会影响全局 Python 环境和其他虚拟环境。 -
退出虚拟环境:
在终端中运行以下命令即可退出虚拟环境:deactivate
pycharm
conda
conda create -n env-name python=3.6
tips
:新的开发环境会被默认安装在你conda目录下的envs文件目录下。你可以指定一个其他的路径;
- 创建指定位置指定版本的虚拟环境
conda create -n d:\envs\fist_env python=3.8 - 激活虚拟环境
- 安装包
- 关闭虚拟环境
导出和导入依赖:
# 导出依赖到文件
pip freeze > requirements.txt
# 从文件中导入依赖:
pip install -r requirements.txt
软件目录开发规范
上述示例中,主要包含以下目录:
docs/
:用于存放项目的文档,包括需求文档、设计文档和API文档等。src/
:存放项目的源代码,按照模块进行组织,例如app/
目录下存放应用代码,config/
目录下存放配置文件,tests/
目录下存放测试代码等。static/
:存放静态资源文件,例如CSS样式文件、JavaScript文件、图片文件和字体文件等。templates/
:存放模板文件,用于生成动态内容的页面。data/
:存放数据文件,例如数据库文件或其他数据存储文件。logs/
:存放日志文件,记录项目的运行日志。dist/
:存放项目的分发版本,例如编译后的可执行文件或打包后的软件包。vendor/
:存放第三方依赖,例如外部库或框架。requirements.txt
:列出项目所需的依赖包及其版本信息。README.md
:项目说明文档,包含项目的介绍、使用指南和其他相关信息。LICENSE
:许可证文件,定义项目的使用和分发条款。