zoukankan      html  css  js  c++  java
  • from __future__ import unicode_literals, absolute_import

    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

  • 相关阅读:
    TypeError: Object of type 'type' is not JSON serializable解决方法
    Python Logging
    Mysql 主从赋值
    (转)Mysql 创建用户 查看权限 授权
    mysql you need (at least one of) the SYSTEM_USER privilege(s) for this operation
    java 多线程 六、线程状态
    java 多线程 五、线程组
    java 多线程 四、线程通信
    java Runtime类 Time类
    java 设计模式 ---- 饿汉 , 懒汉
  • 原文地址:https://www.cnblogs.com/robinunix/p/7891956.html
Copyright © 2011-2022 走看看