[oeasy]python0140_导入_import_from_as_namespace_
导入import
回忆上次内容
上次学习了
try
except
注意要点
半角冒号
缩进
输出错误信息
有错就报告
系统报错信息原样输出
不要隐瞒
否则找不到出错位置
还可以用traceback把
但是代码量好多啊
10多 行了 🤯
可以把他输入部分和输出部分么?🤔
我们先试试
怎么引用 其他的py文件
构建环境
先新建一个namespace文件夹
然后进入这个文件夹
新建两个文件
oeasy.py
my_module.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
退出vima
代表 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
的
i就可以说明从属关系
点(
.
)的意思是的
在 my_module
.
pi

: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文件
不能 直接使用 my_module.py文件中的变量
只要加
my_module.
作为前缀就可以导入一个自己定义的模块
import my_module
可以使用my_module中的变量
直接导入导入变量、函数
导入变量并重命名
可以导入my_module.pi 并作为pi变量使用
from my_module import 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