• 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 # 试图在顶级包之外使用相对导入是错误的,
    # 言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包


  • 相关阅读:
    spring Bean的生命周期
    java合并两个有序数组的算法(抛砖引玉)
    Spring 中解析 URL参数的几种方式
    联合索引和单个索引使用注意事项
    Java中同一个类中不同的synchronized方法是否可以并发执行?
    简析JVM GC的根搜索算法
    spring rest 请求怎样添加Basic Auth请求頭
    spring boot 排除个别配置类的代码
    使用非对称算法RSA实现加解密和使用签名算法SHA1WithRSA、MD5withRSA生成签名以及验签
    Redis中如何发现并优化big key?
  • 原文地址:https://www.cnblogs.com/du-jun/p/9627190.html
Copyright © 2020-2023  润新知