zoukankan      html  css  js  c++  java
  • 浅谈python的import

    动态加载模块:

    使用__import__

    c=__import__('sys')
    

    等价于

    import sys
    

    不过前者可以在执行时决定。

    静态加载:

    也就是常规的import

    from xxx import yyy
    

    or

    import xxx.yyy

    xxx的最小粒度是文件, yyy的最小粒度是文件中的类/变量/函数。

    import寻找对象的顺序:

    1. sys.path

       因为会从这里加载,所以可以通过修改sys.path来修改寻找的范围。

    2. 相对路径

      Pkg--__init__.py

        |----mod1 ----__init__.py

           |            |-mod1.1.py

           |            |-mod1.2.py

           |-mod2-----__init__.py

                        |-mod2.1.py

                        |-mod2.2.py

       注意一个问题。当前如果有使用明确相对路径(explicit relative path)--即使用点号,则避免直接运行当前模块。因为会出错:ValueError: Attempted relative import in non-package。 详细可以参考这里

    明确相对路径,比如在mod2.2.py中

    from . import mod2.1#方式1
    from .mod2.1 import *#方式2
    

      

       除此之外,还有隐晦相对路径(implicit relative path), 即不使用点号,让python自己相对路径查找。----这种方式不被推荐。

    同样是mod2.2.py中

    from mod2.1 import *#or
    import mod2.1
    

      

       相对路径不是很建议使用,参考这里。建议总是使用绝对路径

    mod2.2.py

    from Pkg.mod2.mod2.1 import *# or
    import Pkg.mod2.mod2.1 as some_short_sig
    

      

    什么时候你应该使用 from module import

    • 如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用 from module import
    • 如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import
    • 如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突。
    • 量少用 from module import * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。
  • 相关阅读:
    javascript判断浏览器类型与版本
    javascript动态创建VML
    getElementsByAttribute
    javascript替换字符
    javascript contains方法
    sql2005性能优化(在32位系统上突破2G内存使用量的方法)
    详解如何让WIN2003和SQL2005支持4G以上内存
    搭建Windows CE 6.0团队开发环境
    MS SQL Server启用对4G以上物理内存的支持
    USB 3G Wireless Modem(2010.10.28更新)
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4206155.html
Copyright © 2011-2022 走看看