热门标签 | 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



推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
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社区 版权所有