module
模块: .py结尾 的 python源代码文件
模块名: 一个标识符,所以需要标识符的命名规则
导入: 模块就像是工具包,想要使用工具包中的工具,就需要先导入
全局变量 、函数、类 都是提供给外界直接使用的 工具
导入的核心: 就是将该模块执行一遍
模块导入
1)import导入
import 模块名1
import 模块名2
pep8:在导入模块时,每个模块应该独占一行
调用:模块名.工具
import 模块名 as 别名
模块别名: 大驼峰命名法
调用:别名.工具
4)from…import导入
from 模块名 import 工具名
从 某个模块中,导入 部分工具
调用: 工具名(不需要模块名.)
注意:两模块中,存在 同名的函数, 后导入的模块函数 会覆盖先导入的模块函数
解决方法: 使用 as 关键字 给工具起一个别名
from func1 import hello as func_hello
from func2 import hello
from 模块名 import *
从 某个模块中,导入 所有工具(all)
注意:不推荐使用,原因:出现函数重名时,不好排查
模块的搜索顺序
__file__: 每一个模块都有这个内置属性,可以查看模块的完整路径 print(模块名.__file__)
搜索顺序:
1.当前目录
2.如果没有,再搜索 系统目录
开发时,给文件起名,不要和系统的模块文件重名(覆盖问题)
name属性
__name__是一个内置属性,记录着一个 字符串
被其它模块导入: 就是模块名
执行当前程序: __main__
存在意义:__name__ 属性可以做到,测试模块的代码 只在测试情况下被运行,而在 被导入时不会被执行
通过判断__name__是否等于 __main__ 来决定 被导入时,测试代码不会执行
def main():
测试代码
if __name__ == "__main__":
main()
包(Package)
包: 一个包含 多个模块的 特殊目录
必须含有一个特殊的文件: __init__.py
命名方式: 与变量名一致, 小写字母_功能名
eg: hm_message (package name)
__init__.py
send_message.py
receive_message.py
__init__.py
指定对外界提供的模块列表
里面写明了导入时,导入哪些模块
#从 当前目录 导入 xx模块
from . import send_message
from . import receive_message