名字空间是怎么玩的_from_import_as_导入_namespace
回忆上次内容
- 上次导入了系统模块
- 自己 定义了 模块
- 导入 my_file.py
- 可以使用
- my_file.pi
- my_file模块中的变量pi
- 但不能直接 用pi
从shell开始
- 我们上次有两个文件
- 被引用模块
- my_file.py
- 主体程序
- oeasy.py
vi my_file.py oeasy.py
修改oeasy.py
import my_file
pi = my_file.pi
print(pi)
locals()
import my_file
pi = my_file.pi
print(pi)
print(locals())
导入模块
import my_file as my_module
pi = my_module.pi
print(pi)
print(locals())
提问
from...import...
- from my_file import pi
- 就相当于 声明了 本地变量pi
- 并将 my_file.pi的值(3.14)
- 赋给 本地变量pi
- 本地变量
- 没导入 my_file模块
- 只导入 my_file.pi值
- 不同 模块中 导入的
- 可以观察到冲突现场吗?
冲突现场
- 声明了pi之后
- 先将 my_file模块中 pi的值(3.14)
- 赋给 本地变量pi
- math模块中
- pi的值(3.141592553589793)
- 赋给 本地变量pi
- 本地变量名(local name)pi
- 本地变量pi 只有一个值
- 3.141592553589793
- 最开始从 my_file模块中
- 赋过来的 3.14被覆盖掉了
- 新 导进来的变量
from ... import ... as ...
- 可以的
- from ... import ... as ...
- 可以把变量名 更明确一点
- 其实就是 起个新名字
- 然后 进行赋值
- 这样的话
- 本地 就有了 两个不同的 pi
- my_pi
- math_pi
- 分别来自 两个不同名字空间
名字空间(namespace)
- my_file 和 math 就是名字空间
- 不同名字空间中
- 可以 有 相同的 变量pi
- 他们 彼此之间 不受影响
python之禅最后一句
import this
pep-8
- 导入 共分成 三类
- 标准库
- 第三方库
- 本地库
- 类别之间需要一个空行
- https://peps.python.org/pep-0008/#imports
最终代码
- math 是 系统类库 在前面
- my_file 是 本地自建类库 在后面
- 之间有一个空行
from math import pi as math_pi
from my_file import pi as my_pi
print(locals())
总结
- 这次直接从模块中导入变量、函数
- from my_file import pi
- from my_file import pi as my_pi
- 为什么 从模块中导入的变量 需要改名呢???
- 下次再说
- 蓝桥->https://www.lanqiao.cn/courses/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython