搞懂Python包之后,感觉学Python轻松多了1.前言2.Python包3.包初始化4.Importing * From a Package5.子包( 三 )
pkg
├──sub_pkg1
│├──mod1.py
│└──mod2.py
└──sub_pkg2
├──mod3.py
└──mod4.py
四个模块(mod1.py,mod2.py,mod3.py和mod4.py)的定义如前所述 。 但是现在 , 它们不是被集中到pkg目录中 , 而是被分成两个子目录 , sub_pkg1和sub_pkg2 。
导入仍然和前面显示的一样工作 。 语法类似 , 但是额外的点符号用于分隔包名和子包名:
>>>importpkg.sub_pkg1.mod1
>>>pkg.sub_pkg1.mod1.foo()
[mod1]foo()
>>>frompkg.sub_pkg1importmod2
>>>mod2.bar()
[mod2]bar()
>>>frompkg.sub_pkg2.mod3importbaz
>>>baz()
[mod3]baz()
>>>frompkg.sub_pkg2.mod4importquxasgrault
>>>grault()
[mod4]qux()
此外 , 一个子包中的模块可以引用同级子包中的对象(如果同级子包包含你需要的某些功能) 。 例如 , 假设你想从mod3模块中导入并执行mod1中的函数foo() 。 你可以使用绝对导入:
pkg/sub_pkg2/mod3.py
defbaz():
print('[mod3]baz()')
classBaz:
pass
frompkg.sub_pkg1.mod1importfoo
foo()
>>>frompkg.sub_pkg2importmod3
[mod1]foo()
>>>mod3.foo()
[mod1]foo()
或者你可以使用相对导入 , 其中..指的是上一级的包 。 从mod3.py中引用的话也就是sub_pkg2这一层 。
..结果为父包(pkg),../sub_pkg1结果为子包sub_pkg1 。
pkg/sub_pkg2/mod3.py
defbaz():
print('[mod3]baz()')
classBaz:
pass
from..importsub_pkg1
print(sub_pkg1)
from..sub_pkg1.mod1importfoo
foo()
>>>frompkg.sub_pkg2importmod3
<module'pkg.sub_pkg1'(namespace)>
[mod1]foo()
【搞懂Python包之后,感觉学Python轻松多了1.前言2.Python包3.包初始化4.Importing * From a Package5.子包】
文章图片
- Python各种进制之间的转换方法
- 继语音包之后张大仙再获特权,率先体验露娜新皮肤,官方给足牌面
- 还没搞懂数据挖掘?一款易学易用的工具来帮你!
- 终于有人把Python讲清楚了!
- 手机最强 Python 编程神器,Android、IOS 都可以!
- SQL Server 2014+MongoDB+Python数据库技术及应用(教学大纲)
- 许愿神器来了 ,30行Python打造了一款许愿墙,希望能追到女神!
- Python被称作“数据分析之王”的原因
- Python30岁,先驱:没想到Python这么流行
- Python 的类其实是一个特殊的对象
