[oeasy]python0140_导入_import_from_as_namespace_

文章介绍了Python中如何导入模块,包括使用`import`语句和`from...import`方式。通过示例解释了导入模块后如何访问其内部变量,强调了命名空间的重要性,以及避免使用`fromxxximport*`的原因。同时,提到了使用别名导入的方法。

导入import

回忆上次内容

  • 上次学习了
    • try
    • except
  • 注意要点
    • 半角冒号
    • 缩进
    • 输出错误信息
  • 有错就报告
    • 不要隐瞒
    • 否则找不到出错位置
    • 还可以用traceback把
      • 系统报错信息原样输出
  • 但是代码量好多啊
    • 10多 行了 🤯
    • 可以把他输入部分和输出部分么?🤔
  • 我们先试试
    • 怎么引用 其他的py文件

构建环境

  1. 先新建一个namespace文件夹
  2. 然后进入这个文件夹
  3. 新建两个文件
    1. 被引用模块
      • my_module.py
    2. 主体程序
      • oeasy.py

图片描述

  • 然后进去
    • 编辑这两个文件
      • vi -o my_module.py oeasy.py
      • -o 是分窗口编辑文件

效果

  • 结果如下图所示

图片描述

  • oeasy.py中输入
    • import my_module
  • my_module.py中输入
    • print(“in another”)

保存并运行

  • ctrl+k 切换到上方windows
  • ctrl+j 切换到下方windows

图片描述

  • :wqa
    • 全部保存并退出
      • w 的意思是先保存
      • q 退出vim
      • a 代表 all buffers 所有缓存

运行结果

  • 运行的是oeasy.py
    • 输出了"i am my_module.py"
  • 这说明
    • 导入成功了

图片描述

  • 运行的是
    • oeasy.py
  • oeasy.py中导入了
    • my_module.py
  • my_module.py中
    • 输出了 “i am my_module.py”
  • 通过导入my_module.py
    • 执行了其中的代码
  • 导入对应的关键词import
    • 应该如何理解呢?

import

  • 进口(import)
    • 这里指的是导入模块
    • 这也是python强大之处
    • 可以导入各种使用的包来使用

图片描述

  • 可以导入多个文件吗?😱

导入多个文件

  • 上图建议的是
    • 不同模块分行导入

图片描述

  • 导入除了可以调用对方代码
    • 还能做什么呢?

尝试引用包内变量

图片描述

  • 可以在my_module.py中定义变量
    • 在oeasy.py中引用吗?

尝试运行

图片描述

  • pi没有找到😭

图片描述

  • 不慌
    • 好饭不怕晚
  • 不是把这些字节码都运行了么?
    • 但是这里面有个作用域(namespace)的问题
    • i 属于 my_module.py
    • 而不属于oeasy.py
    • 所以直接运行找不到i
  • 那怎么办?

修改

  • 只要说清楚这个i来自于my_module就可以了
  • 用一个点(.)
    • 就可以说明从属关系
    • 点(.)的意思是
    • 在 my_module . pi
      • 就是 在my_module i

图片描述

  • :wa
    • write all
    • 两个文件都保存
  • :!python3 %
    • 用外部命令python3运行当前文件

图片描述

  • pi找到了😌
  • 在my_module.py中
    • pi就是一个标准的变量声明赋值
  • 如果我就想在 oeasy.py 中直接使用 pi
  • 可能么?

修改

  • 声明了一个变量pi
    • 并把mymodule.i的值赋给他

图片描述

  • 还有其他写法吗?

from…import…

  • 这句话好像好使

图片描述

  • local()函数
    • 可以查看本地局部变量

图片描述

  • 本地变量会撞车吗?

撞车(local name crash)

图片描述

  • 因此要特别注意尽量
    • 不要使用from xxx import *
    • 这种容易撞车的语句

图片描述

  • 撞车是什么样子的!?
    • 可以欣赏一下车祸现场吗?

车祸现场

图片描述

  • my_module.pi 被 math.pi 撞飞了

图片描述

  • 这其实也是名字空间(namespace)的意义

namespace

  • 名字空间是个好主意!

图片描述

  • 那可以给导入进来的变量改名么?

from … import … as …

图片描述

  • 可以的
    • 这样可以把变量名更明确一点
    • 其实就是又起了个名字
    • 然后进行赋值

图片描述

  • 任务达成!!!
    • 总结一下 !✿✿ヽ(°▽°)ノ✿

总结

  • 我们这次导入了外部的py文件
    • import my_module
      • 导入一个自己定义的模块
    • 可以使用my_module中的变量
      • 不能 直接使用 my_module.py文件中的变量
      • 只要加my_module.作为前缀就可以
  • 直接导入导入变量、函数
    • from my_module import pi
      • 可以导入my_module.pi 并作为pi变量使用
    • from my_module import pi as my_module_pi
      • 导入变量并重命名
  • 上次那个苹果香蕉统计程序
    • 能封装成文件模块
    • 再导入么?🤔
  • 下次再说 👋
  • 蓝桥->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值