热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

包的基础知识及使用方法

本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。

  今天学习了包的基础知识:

  一、什么是包:

    包是一种模块 但本质上就是一个文件夹

    与普通文件夹的区别就是其中包含一个init文件

  二、包的作用

    包的作用就是从文件夹级别组织代码

    目的就是为了提高维护性

  三、什么时候应该使用包

    之前我们将代码抽取到模块中 从文件级别组织代码 但是如果模块比较多的情况下 结构依然混乱

    此时我们就需要使用包来组织代码

  四、包的使用

    创建一个包

    右键 new-> python packge

    使用包

      既然包 也是模块 那么使用方式就是一样的 使用import来导入包

    import 包名

  五、init文件的使用

    我们说包也是一种模块 所以内部原理是一样的

    1、创建名称空间

    2、执行模块中的代码

    3、在执行文件中产生名称指向模块名称空间

    但是现在包他是一个文件不是一个py文件那么第二步该怎么执行呢?

    这时候init.py就派上用场了

    在导入包时 实际上执行的就是这个init文件

    好处:

      如此一来我们可以使用init来把一个文件夹变成一个模块 这个模块的种类是包

      通常情况下 一个包中有多个模块 并且这些模块经常会同时被导入使用

      这时候你可以在init中将需要的模块一次性导入 当外界在使用这个包的时候 就无需再挨个导入了

    总结:

      init的作用是初始化包 初始化其实就是将包中需要提供给外界的模块统一导入 打包在一起

      用户导入了包 就能使用所有的功能

    注意:

      init 导入模块文件时 由于是作为模块导入 所以sys.path中并不包含 模块所在目录 所以应该导入时要指定包名

    pack包下的init

    from pack import module

    import pack.module

 

    另外:

      init文件 在Python2中是必须的Python3中可选的 但是建议都要有规范

 

  六、包的嵌套

    定义:包中有包如下

    要使用子包中的内容 方法一致 在子包中的init中导入需要的内容 但是注意 不管是不是子包 都是作为模块导入

    所以sys.path中肯定不包含子包路径 导入时需要从执行文件目录往下找

    subpack包下的 init文件

    import pack.subpack.module4

  七、导入包时的注意事项

    使用import导入模块时  可以加点来访问下一层

    import pack.subpack.module4

    ==注意 点的左边必须是包名==

    我们也可以使用from来导入

    from pack.subpack import module4

    ==注意 import后面的内容不可以包含点 必须是一个明确的名字==

  八、相对导入与绝对导入

    利用上面的例子 我们继续来思考

    很多时候一个包内的模块需要相互调用对方的功能来完成操作

    按照我们之前的导入方式 从执行文件开始一层一层往下找是可以的

    但是一个问题是如果报的层级较多 你的导入语句会很长

    另一个问题 如果我们后期需要修改包的名称 那你需要将每一个导入语句都进行修改

    来看一下例子:

      我们可以使用相对导入的方式来简化书写并提高我们的代码的扩展性

    注意:

    ==相对导入仅能用于模块之间互相导入 不能用于执行文件中==

    常见错误演示

    1、绝对导入时没有从执行文件目录开始

    2、在执行文件中使用相对导入

    3、跳出顶层包

    ValueError:attempted relative import beyond top-level package

    

    

转:https://www.cnblogs.com/xiaocaiyang/p/9780623.html



推荐阅读
  • 本文详细探讨了使用Python3编写爬虫时如何应对网站的反爬虫机制,通过实例讲解了如何模拟浏览器访问,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
  • Spring 中策略模式的应用:Resource 接口详解
    本文探讨了在 Spring 框架中如何利用 Resource 接口实现资源访问策略。Resource 接口作为资源访问策略的抽象,通过多种实现类支持不同类型的资源访问。 ... [详细]
  • Python函数的高级用法[python基础]
    Python的函数也是一种值:所有函数都是function对象,这意味着可以把函数本身赋值给变量,就像把整数、浮点数、列表、元组赋值给变量一样;同样可以使用函数作为函数的形参,也可 ... [详细]
  • Java 初次编程练习
    任务要求:设计一个类,包含若干基本属性和至少两个方法(可以从日常生活场景中提取)。在类中实现两个具有不同参数的构造方法。另外,设计一个包含 main 方法的类,用于测试和应用上述类。此作业需编写并调试通过。 ... [详细]
  • 可参照github代码:https:github.comrabbitmqrabbitmq-tutorialsblobmasterjavaEmitLogTopic.ja ... [详细]
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 分享两个GitHub链接,今天看到的,超赞超赞不能更赞了,答应我一定要去看好吗~~~~不论是笔记还是github中分享的其它资源ÿ ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 如何在 Python 列表中添加元素 [Python 基础]
    本文介绍了 Python 中常用的三种方法来向列表中添加元素:`append()`、`extend()` 和 `insert()`。这些方法分别适用于不同的场景,帮助开发者灵活地管理列表数据。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有