Python 包的使用

前言

终于活过来了,电脑涅槃重生,还好养成了把东西存在了其余盘的习惯,让大部分东西在重装之后继续陪我走了下去,哈哈哈。
今天分享一下模块这块我认为值得分享的最后一点东西----包的使用,后面就进行到面向对象了。因为sys、os、hashlib、time,甚至于logging模块等等,只要掌握他的使用就好,理解也比较简单,大家随用随搜就ok。

引入

eg:time模块 一个py文件,200个函数,功能特别多,分文件,分三个文件,time文件夹:time1 time2 time3.py文件,这个time文件夹就叫做包
pycharm包的示例:

包的本质就是模块

无论从哪里引用模块,import 或者 from … import …最开始的模块名一定是sys.path中能找到的

直接import 为了让我们会使用 包里面的__init__

第一类:执行文件 通过import导入包以及包内的功能

  • 创建一个ly包,自行创建一个__init__.py文件

    • 发生三件事:

      1、将ly文件夹内的__init__.py文件加载到内存

      2、创建一个以ly命名的名称空间

      3、通过ly.的方式引用__init__的所有的名字

  • 示例:在这里插入图片描述

    运行结果:欢迎
    1

  • 引用 ly包的m1文件的a变量

    做法依据:模块搜索路径 内存,内置,sys.path

    m1不在内存,不在内置,sys.path会主动加载执行文件(包.py)的当前目录

    解决方法:

    • 1、在执行文件写入 import ly
    • 2、ly的__init__里面写入 from ly import m1
    • 3、然后执行文件 ly.m1.a
      在这里插入图片描述
  • 如何在当前文件中,引用ly包的ly1包

    解决方法

    • 1、在执行文件写入 import ly

    • 2、ly的__init__里面写入 from ly import ly1

    • 3、然后执行文件 ly.ly1 (引用变量或执行函数写在ly1包的__init__里)

    • import ly
      print(ly.ly1)
      
      ly1包的__init__里写入print('in ly1')
      运行结果:
      in ly1
      <module 'ly.ly1' from 'C:\\Users\\ASUS\\PycharmProjects\\pythonProject1\\18day\\ly\\ly1\\__init__.py'>
      
  • 如何在当前文件中,引用ly包的ly1包变量name

    • print(ly.ly1.name)
      
  • 如何在当前文件中,引用ly包的ly1包的m3文件的变量(函数)
    解决方法:

    • 1、在执行文件写入 import ly

    • 2、在ly包的__init__写入 from ly import ly1(这样写 ly包的__init__里面所有的名字都能引用)

    • 3、在ly1包的 __init__ 写上from ly.ly1 import m3

    • 4、执行ly.ly1.m3.find()

在这里插入图片描述

第二类:执行文件 通过from … import … 导入包以及包内的功能

  • 规则:from a.b.c import d 通过这种方式不用设置_init_
    • c的. 的前面一定是包
    • import 的后面一定是名字,并且不能再有点

在这里插入图片描述

相对导入、绝对导入

最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

  • 绝对导入:以当前执行文件所在目录 .的一系列导入

  • 1、执行文件与模块同时处于一个文件夹下 调用

在这里插入图片描述

import nb
nb.f1()
nb.f2()
nb.f3()
nb.f4()
nb.f5()
nb.f6()
  • 2、(当nb加入许多功能函数)由于nb模块增加了很多很多功能,所以我们nb这个文件就要划整一个包

    无论对nb模块有任何操作,对于使用者来说不应该改变,极少的改变对其的调用
    在这里插入图片描述

    调用方式仍不变

  • 3、当nb包与执行文件不在同一目录下,即执行文件与存放包的文件夹(相对导入与绝对导入)处于同一目录下时

    import sys
    sys.path.append(r'nb包路径')
    

    以上三种导入包方式import path/from path import…中的path均以执行文件所在目录为开始

    即以glance作为起始

在这里插入图片描述

  • 相对导入:. … …等

  • eg:将当绝对导入的第三种的NB文件夹名字改为其他时(nb)

    执行文件内容修改如下:

    import sys
    sys.path.append(r'G:\pythonProject\包\相对导入与绝对导入\dir')
    import nb as NB
    NB.f1()
    NB.f2()
    NB.f3()
    NB.f4()
    NB.f5()
    NB.f6()
    

在这里插入图片描述

仍发现错误,为__init__文件中并没有将nb改为NB

此时修改如下:

from .m1 import f1, f2
from .m2 import f3, f4
from .m3 import f5, f6
执行成功

. 即__init__的当前目录的m1文件 等价于nb.m1,防止修改名称后的导入错误

  • 这种以 . … …等开始的导入为相对导入
  • . 当前目录
  • … 父级目录
  • … 父级的父级目录
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acco_30_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值