百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

[oeasy]python072_名字空间是怎么玩的_from_import_as_导入

csdh11 2025-04-07 13:20 4 浏览

名字空间是怎么玩的_from_import_as_导入_namespace

回忆上次内容

  • 上次导入了系统模块
    • __hello__
    • time
  • 自己 定义了 模块
    • my_file
  • 导入 my_file.py
    • 作为 自定义的
    • my_file模块
  • 可以使用
    • my_file.pi
    • my_file模块中的变量pi
  • 但不能直接 用pi

  • 如果 就想 直接用pi
    • 又应该怎么办呢???

从shell开始

  1. 我们上次有两个文件
    1. 被引用模块
    2. my_file.py
    3. 主体程序
    4. oeasy.py
vi my_file.py oeasy.py
  • :ls效果

  • 依次打开了两个文件

  • :b2
    • 切到oeasy.py
  • 可以直接输出pi吗?

修改oeasy.py

import my_file
pi = my_file.pi
print(pi)
  • 如下图所示

  • 声明本地变量pi
    • 并将my_file模块中
      • pi的值(3.14)
      • 赋给 本地变量pi

  • 本地 都有 哪些 变量?

locals()

  • locals函数
    • 查询本地变量
import my_file
pi = my_file.pi
print(pi)
print(locals())
  • 相比 dir()
    • 只显示 本地变量名
  • locals()
    • 不但 显示本地变量
    • 还显示 变量的值

  • 本地变量 包括
    • my_file 模块
    • pi 浮点小数变量
  • 模块 可以 改名吗?

导入模块

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

  • 真的没有导入模块吗?
    • locals()函数
    • 查看 本地局部变量

  • 本地变量
    • 没导入 my_file模块
    • 只导入 my_file.pi值
      • 赋给 本地变量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之禅最后一句

  • 导入this模块
import this 
  • 展示 python之禅
    • 名字空间 是 个好主意!

  • 可以用 名字空间 保护
    • 各自空间中的 变量
    • 彼此之间 不会 覆盖
  • 目前 还有个 小瑕疵

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
      • 导入my_file.pi
      • 并作为 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

相关推荐

[oeasy]python0110 屏幕点阵字体_3x5_5x7_雅达利字库

回忆上次内容上次回顾了字符字型的进化过程从谷腾堡活字印刷中的...

oeasy教您玩转vim - 29 - # 垂直翻页

垂直翻页回忆上节课内容...

[oeasy]python071_自己做一个模块吗_自定义模块_引入模块_import

导入import回忆上次内容...

[oeasy]python0129_unicode中文字符序号十三道大辙_字符编码解码

unicode中文字符分类回忆上次内容字符集从博多码到...

[oeasy]python0082_VT100_演化_颜色设置_VT选项_基础色_高亮色_

更多颜色回忆上次内容上次了解了控制序列背后的故事一切标准都是从无到有的就连负责标准的组织也是从无到有的...

「oeasy」python0010 - python虚拟机解释执行py文件的原理

解释运行程序回忆上次内容我们这次设置了断点...

[oeasy]python0137_相加运算_python之禅_import_this_显式转化

变量类型相加运算回忆上次内容上次讲了是从键盘输入变量input函数可以有提示字符串需要有具体的变量接收输入的字符串...

python代码是如何执行的?(python 代码运行)

解释运行程序回忆上次内容py文件的程序是按照顺序一行行挨排解释执行的我们可以python3-mpdbhello.py来对程序调试...

[oeasy]python0145_版本控制_git_备份还原

git版本控制回忆上次内容上次我们了解了try的完全体try尝试运行...

[oeasy]python072_名字空间是怎么玩的_from_import_as_导入

名字空间是怎么玩的_from_import_as_导入_namespace回忆上次内容...

[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder

如何导入模块_导入模块的作用_hello_dunder_双下划线回忆上次内容...

「oeasy」python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生

换行字符回忆上次内容struct包可以让我们使用封包格式...

[oeasy]python0115_西里尔字符集_Cyrillic_俄文字符编码_KOI

各语言字符编码回忆上次内容上次回顾了非ascii的拉丁字符编码的进化过程0-127是ascii的领域...

[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana加法

回忆上次内容上次直接从模块中导入变量、函数...

[oeasy]python049_帮助手册_pydoc_manual_document

帮助手册回忆上次内容上次了解了注释注释是为了让程序更可读注释不会影响程序运行速度...