from __future__ import absolute_import用法心得小结

本文探讨了Python中绝对导入与相对导入的区别,特别是在加入from __future__ import absolute_import后的行为变化。对于不同类型的项目(如应用程序与工具包),文章详细解释了如何正确使用这两种导入方式,并介绍了该特性在大型项目的实际应用案例。
这是一个在py2.x中导入3.x的导入特性的语句, 是为了区分出绝对导入和相对导入.
在一般的Python学习资料中介绍3.x的相对导入时候一般都会说相对导入最后不要超过两层.
但是需要区分出我们编写的代码是干嘛的,如果是写的应用程序,在加入了from __future__ import absolute_import 之后,那么在程序的编写过程中使用类似from package.submodule import b 只能导入系统环境路径里面的包,导入不了你写的应用程序的子包,如果导入你写的应用程序的子包必须使用from ..submodule import b

如果写的是工具类程序,比如说写的是三方包,发布给别人安装。那么在加入了from __future__ import absolute_import 之后还是可以在相对导入的时候使用from package.submodule import b 。那么这么做不是from __future__ import absolute_import 所说的特性没有了么。其实不然。因为我们编写的程序是需要安装在系统环境路径里面的,所以这种绝对导入的方式是可以相对导入的,这个时候搜索包名的时候是在系统环境路径里面搜索,但是因为你的包就在这些路径的某一个路径里面,所以可以搜得到from package.submodule import b 里面的b(模块,函数,变量,类)。这种编写工具包以绝对导入进行相对导入的方法还避免了from ..submodule import b 最好导入不超过两层的这一建议. 特别适合在开发大型工具的时候。比如著名的深度学习框架tensorflow就是用的这种特性.

下面是截取tensorflow.contrib.__init__.py里面的代码
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

# Add projects here, they will show up under tf.contrib.
from tensorflow.contrib import bayesflow
from tensorflow.contrib import copy_graph
from tensorflow.contrib import crf
from tensorflow.contrib import cudnn_rnn
from tensorflow.contrib import distributions
from tensorflow.contrib import factorization
from tensorflow.contrib import framework
from tensorflow.contrib import graph_editor
from tensorflow.contrib import grid_rnn
引用\[1\]: 如果你想使用import string来引入系统自带的string.py,而不是当前目录下的string.py,你可以使用from __future__ import absolute_import这句话。这样,你就可以使用import string来引入系统自带的string.py,同时使用from pkg import string来引入当前目录下的string.py。\[1\] 引用\[2\]: 这句from __future__ import absolute_import的作用是引入"绝对引入"。在python2.4或之前的版本中,如果你在代码中写入import string,python会先查找当前目录下是否有string.py,如果有,则引入该模块。但如果你想使用系统自带的标准string.py,而不是当前目录下的string.py,就需要使用from __future__ import absolute_import这句话。这样,你就可以使用import string来引入系统自带的标准string.py,同时使用from pkg import string来引入当前目录下的string.py。\[2\] 所以,当你在python2.4之后的环境下运行代码时,不需要加上from __future__ import absolute_import这句话。但如果你在python2.4或之前的环境下运行代码,并且想要引入系统自带的标准string.py,就需要加上这句话。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [【Pythonfrom __future__ import absolute_import的作用](https://blog.youkuaiyun.com/qq_15971883/article/details/121527294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [from __future__ import absolute_import的作用](https://blog.youkuaiyun.com/u012206617/article/details/106493749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值