zoukankan      html  css  js  c++  java
  • 包,模块

    导入模块

    1、import

    2、__import__:

    内置函数__import__ 可以动态导入模块,接受字符串作为参数

    eg:

    mod = __import__('os')         # 相当于import os as mod

    func = getattr(mod,'walk')   # 通过反射获取

    func()    # 相当于 os.walk()

    3、包结构中__init__.py的作用:

    从上边的例子可以看出,__init__.py的主要作用是:

    1)、Python中package的标识,不能删除

    2)、定义__all__用来模糊导入。

    模糊导入中的*中的模块是由__all__来定义的,__init__.py的另外一个作用就是定义package中的__all__,用来模糊导入,如__init__.py:

    __all__ = ["Pack1Class","Pack1Class1"]

    3)、编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)

    4、2个模块不要相互导入,这样会导致循环依赖,导入失败。可以创建一个中间位置存放公共变量。

    5、通过相对路径导入模块:

      假设我们的项目目录结构如下所示:

    test
    ├── a.py
    ├── b.py
    └── __init__.py
    
    0 directories, 3 files

      在a.py 中我们使用相对路径导入了b.py中的相关变量

      

    from .b import c
    print (c)

      当我们做以下2种操作时:

      1)、在test目录中执行python a.py 会报错提示导入失败

    Traceback (most recent call last):
      File "a.py", line 1, in <module>
        from .b import c
    ModuleNotFoundError: No module named '__main__.b'; '__main__' is not a packag

      这是因为使用了相对路径导入,而直接调用python a.py将导致它不能找到它的父目录. 我们需要跳出该项目所在的目录test, 在test目录外面的其它模块导入a即可, 

      那为什么不直接使用from b import c 这样的方式导入呢,这样也可以,这样在任何地方直接执行a.py都可以执行成功,但结果是你在test 外面其它的地方导入 a 将失败,这时它会在自己当前的搜索路径中去找,而test不在当前的搜索路径中。

  • 相关阅读:
    jdk8u144安装在centos7上
    事件对象(示例、封装函数EventUtil())
    事件处理程序
    取消冒泡
    编程挑战JavaScript进阶篇(慕课网题目)
    网页卷去的距离与偏移量
    DOM编程练习(慕课网题目)
    浏览器窗口可视区域大小
    网页尺寸scrollHeight/offsetHeight
    替换元素节点replaceChild()
  • 原文地址:https://www.cnblogs.com/pengxuann/p/6000996.html
Copyright © 2011-2022 走看看