"""
1. 什么是模块
模块是一系列功能的集合体,分为三大类
(1)内置模块
(2)第三方模块
(3)自定义模块
一个Python文件本身就是一个模块,文件名m.py,模块名叫m
ps:模块的四种形式
1 使用Python编写的.py文件
2 已被编译为共享库或dll的c或c++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用c编写并链接到Python解释器的内置文件
2. 为何要用模块
(1)内置与第三方模块拿来就用,无需定义,可以极大地提升自己的开发效率
(2)自定义模块
可以将程序的各部分功能提取出来放到一个模块中共享使用
减少了代码冗余,程序组织结构更加清晰
"""
# 导入模块
import foo
# 首次导入模块会发生3件事
# 1.执行foo.py
# 2.产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢丢到foo的名称空间中
# 3.在当前文件中产生一个名字foo,该名字指向2中产生的名称空间
# 引用
# 强调1:模块名.名字
print(foo.x)
# 强调2:无论查看还是修改,都是以原模块为基准,与调用位置无关
x = 3333
print(foo.x)
# Python模块导入规范:导入顺序
# 内置模块
# 第三方模块
# 自定义模块
# import ... as ... 重命名
------------------------------------
# from...import...导入模块
# import导入模块在使用时必须加前缀"模块."
# 优点:肯定不会与当前名称空间中的名字冲突
# 缺点:加前缀会显得麻烦
# from...import...导入也发生了三件事
# 1.产生一个模块的名称空间
# 2.运行foo.py将运行过程中产生的名字都丢到模块的名称空间中
# 3.在当前名称空间拿到一个名字,该名字与模块名称空间中某一内存地址
# from...import...import导入模块在使用时不用加前缀"模块."
# 优点:代码更精简
# 缺点:容易与当前名称空间混淆
from foo import x
from foo import change
----------------------------------
# 模块的搜索路径优先级
# 无论是import还是from...import...在导入模块时都涉及到查找优先级问题
# 1.内存(内置模块)
# 2.按照sys.path中存放的文件的顺序依次查找要导入的模块
import sys
# 值为一个列表,存放了一系列的文件夹
# 其中第一个文件夹是当前执行文件所在的文件夹
print(sys.path)
# 临时追加路径
# sys.path.append(r'路径')