from __future__ import unicode_literals, absolute_import
2024-10-20 17:18:26
Q:python模块中的相对导入,绝对导入,有些地方会写
from __future__ import absolute_import
希望有个更详细的讲解。
A:
相对导入:在不指明 package 名的情况下导入自己这个 package 的模块,比如一个 package 下有 a.py 和 b.py 两个文件,在 a.py 里 from . import b 即是相对导入 b.py。 绝对导入:指明顶层 package 名。比如 import a,Python 会在 sys.path 里寻找所有名为 a 的顶层模块。 from __future__ import absolute_import: 在 3.0 以前的旧版本中启用绝对导入等特性所必须的 future 语句。
关于这句from __future__ import absolute_import
的作用:
直观地看就是说”加入绝对引入
这个新特性”。说到绝对引入
,当然就会想到相对引入
。那么什么是相对引入
呢?比如说,你的包结构是这样的:
pkg/
pkg/init.py
pkg/main.py
pkg/string.py
如果你在main.py中写import string
,那么在Python 2.4或之前, Python会先查找当前目录下有没有string.py, 若找到了,则引入该模块,然后你在main.py中可以直接用string了。如果你是真的想用同目录下的string.py那就好,但是如果你是想用系统自带的标准string.py呢?那其实没有什么好的简洁的方式可以忽略掉同目录的string.py而引入系统自带的标准string.py。这时候你就需要from __future__ import absolute_import
了。这样,你就可以用import string
来引入系统的标准string.py, 而用from pkg import string
来引入当前目录下的string.py了
关于是自己写的应用程序还是发布出去的第三方的包,这句话的含义不太理解,参考:
http://blog.csdn.net/stan_pcf/article/details/60465665
最新文章
- iOS组件化思路 <;转>;
- About_全在里面
- git更换仓库地址
- python 函数小实例
- CG资源网 - Maya教程
- 优化MySQL,还是使用缓存?读一篇文章有感
- EF 用CallContext上下文管理
- 在Oracle中使用rank()over()排名的问题
- linux下的shell和脚本
- WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?
- seajs简记
- iOS 10推送通知开发
- java精度计算代码,指定精确小数位
- 通过bootloader向内核传输启动参数
- js中的for循环案例
- Asp.net core Razor 页面
- [Luogu3768]简单的数学题
- [2017.4.7校内训练赛by hzwer]
- Java多线程volatile和synchronized总结
- ERROR 1045 (28000): Access denied for user &#39;xxx&#39;@&#39;localhost&#39; (using password: YES)【奇葩的bug】