01模块
1.1模块的概念
模块是Python程序框架的一个核心概念
--每一个以扩展名py结尾的Python源代码文件都是一个模块
--模块名同样也是一个标识符,需要符合标识符的命名规则
--在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具
--模块就好比是工具包,要想使用这个工具包中的工具,就需要先导入这个模块
1.2模块的两种导入方式
1)import导入
import 模块1, 模块2 # 不推荐
提示:在导入模块时,每个导入应该独占一行
import 模块1 import 模块2
导入之后
--通过模块名,使用模块提供的工具--全局变量、函数、类
--如果模块的名字太长,可以使用as指定模块的名称,以方便在代码中的使用
import 模块1 as 模块别名
注意:模块别名应该符合大驼峰命名法
2)from ... import导入
--如果希望从某一个模块中,导入部分工具,就可以使用from ... import的方式
--import 模块名 是一次性把模块所有工具全部导入,并且通过模块名/别名访问
# 从模块导入某一个工具 from 模块名1 import 工具名
导入之后
--不需要通过模块名
--可以直接使用模块提供的工具--全局变量、函数、类
注意:如果两个模块存在同名的函数,后倒入的模块的函数会覆盖掉先导入的函数
from Py_20220811_01 import say_hello from Py_20220811_03 import say_hello say_hello()
--开发时import代码应该同意写在代码的顶部,更容易即使发现冲突
--一旦发现冲突,可以使用as关键字给其中一个工具起一个别名
from Py_20220811_01 import say_hello from Py_20220811_03 import say_hello as modul2_say_hello say_hello()
3)from ... import *导入
# 从模块导入所有工具 from 模块1 import *
注意 :这种方式不推荐使用,是因为函数重名并没有任何提示,出现的问题不好排查
from Py_20220811_01 import * from Py_20220811_03 import * say_hello()
1.3模块的搜索顺序
Python的解释器在导入模块时,会:
1、搜索当前目录指定模块名的文件,如果有就直接导入
2、如果没有再搜索系统目录
--在开发时,给文件起名,不要和系统的模块文件重名(会覆盖)
--Python中每一个模块都有一个内置属性__file__可以查看模块的完整路径
import random # 生成一个0~10的数字 rand = random.randint(0,10) print(rand) print(random.__file__)
1.4原则--每一个文件都应该是可以被导入的
--一个独立的Python文件就是一个模块
--在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍
实际开发场景
--在实际开发中,每一个模块都是独立开发的,大多都有专人负责
--开发人员通常都会在模块下方增加一些测试代码
仅在模块内使用,而被导入到其他文件中不需要执行
__name__属性
1、该属性可以做到测试模块的代码只在测试情况下被运行,而在被导入时不会被执行
2、__name__是Python的一个内置属性,记录着一个字符串
3、如果是被其他文件导入的,__name__就是模块名
4、如果是当前执行的程序,__name__是__main__
因此,在很多Python文件都是如下格式:
# 导入模块 # 定义全局变量 # 定义类 # 定义函数 # 在代码的最下方 def main(): # ... pass # 根据__name__判断是否是被调用还是本体内自己用 if __name__ == "__main": main()
02包
---包是一个包含多个模块的特殊目录
--目录下有一个特殊的文件__init__.py
--包名的命名方式和变量名一致,小写字母+_
好处:使用import 包名 可以一次性导入包中所有的模块
案例演练:
1、新建一个hm_message的包
2、在目录下,新建两个文件send_message和receive_message
3、在send_message文件中定义一个send函数
4、在receive——message文件中定义一个receive函数
5、在外部直接导入hm_message的包
import hm_message hm_message.send_message.send("我是帅哥!") print(hm_message.receive_message.receive())
__init__.py
--要在外界使用 包 中的模块,需要在__init__.py中指定对外界提供的模块列表
# 从当前目录导入模块列表 from . import send_message from . import receive_message
03发布模块
如果希望自己开发的模块,分享给其他人,可以按照以下步骤操作
3.1制作发布压缩包步骤
1)创建setup.py
-setup.py的文件
固定模板
from distutils.core import setup setup(name="hm_message", # 包名 version="1.0", # 版本 description="个人模块", # 描述信息 long_description="我的模块", # 完整的描述信息 author="王总", # 作者名 author_email="295723987@qq.com", # 作者邮箱 url="www.baidu.com", # 作者主页 py_modules=["hm_message.send_message", "hm_message.receive_message"])
2)构建模块
# 在Windows端可以使用powershell python setup.py build
3)生成发布压缩包
python setup.py sdist
3.2安装模块
tar -zxvf hm_message-1.0.tar.ge # 这是一个压缩包的名字 sudo python setup.py install
卸载模块
cd 目标文件目录 sudo rm -r hm_message*
3.3pip安装第三方模块
--第三方模块通常是指由知名的第三方团队开发的并且被程序员广泛使用的python包/模块
例如:pygame就是一套非常成熟的游戏开发模块
--pip是一个现代的,通用的python包管理工具
--提供了对python包的查找、下载、安装、卸载等功能
安装和卸载的命令如下:
# 将模块安装到python2.x环境 sudo pip install pygame sudo pip uninstall pygame # 将模块安装到python3.x环境 sudo pip3 install pygame sudo pip3 uninstall pygame
Windows直接
pip install pygame