zoukankan      html  css  js  c++  java
  • Python基础-入门之路PYTHON-包 相对导入&绝对导入

    什么是包
    包也是一种模块,但本质上就是一个文件夹
    对于使用者而言 使用方式和模块没有任何区别
    本质上就是一个文件夹 不同之处在于 多了一个__init__.py 叫包的初始化文件


    import导入模块时发生了三件事情
    1.创建名称空间
    2.执行模块py文件 加载名称
    3.在执行文件产生新的名称 指向模块


    在导入包的时候 由于包实际上是一个文件夹 不能被执行 所以包中需要提供__init__.py文件
    该文件用于代表这个包
    所以上面import pack 实际上时执行了pack下的__init___.py 导入了这个名称


    __init__.py文件的作用? ******
    说白了就是导入该包下的所有模块 这样一来使用包的人 用起来非常简单 无需关心包中的文件结构
    只要导入了包 就能使用包中的所有功能
    __init__.py 应该包含什么内容?
    不应该包含任何的业务逻辑 仅仅用于导入包中的模块


    # 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
    # 优点: 执行文件与被导入的模块中都可以使用
    # 缺点: 所有导入都是以sys.path为起始点,导入麻烦

    from dir0.dir1 import m1 # 执行文件中只能用绝对导入
    m1.f1()

    # 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
    # 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
    # 优点: 导入更加简单
    # 缺点: 只能在导入包中的模块时才能使用,不能在执行文件中用

    #注意:
    # 1. 相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内
    # 2. attempted relative import beyond top-level package # 试图在顶级包之外使用相对导入是错误的,
    # 言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包


  • 相关阅读:
    C++中的空类默认产生哪些类成员函数
    Berkeley Socket API – Creating a TCP/IP client in C
    覆盖父类以及using指令
    strcpy/memcpy/memmove的实现
    [C++对象模型][1]目录与参考
    用setsockopt()来控制recv()与send()的超时
    异常安全的赋值运算符重载函数
    伤不起的指针
    DP01背包
    证明一个数能被3整除,当且仅当它的各位数的和能被3整除
  • 原文地址:https://www.cnblogs.com/du-jun/p/9627190.html
Copyright © 2011-2022 走看看