压制组装机 Hibernate Gradle templates tree Validator 八大员 jquery绑定change事件 js事件绑定 android入门实例 matlab中不等于怎么表示 python正则提取字符串 python函数内定义函数 python调用命令行 java设置 java遍历文件夹下所有文件 java程序设计教程 kafka中文教程 计算机电子书 战地2单机地图 微信超级好友 mathcad15 不屑表情包 mysql导出数据 抠图软件免费版 超过响应缓冲区限制 c程序 execryptor win98序列号 360越狱版 战地2地图包下载 圣武枪魂 苹果手机怎么微信双开 c4dr20 ajax获取数据 服务器系统安装教程 钢笔工具怎么画曲线 方正gbk total同级生2下载 正则表达式测试工具
当前位置: 首页 > 学习教程  > python

学习python(十八)——模块与包

2021/2/6 22:21:36 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

1.模块 Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的…

1.模块

Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率。那么,模块到底指的是什么呢?模块,英文为 Modules,至于模块到底是什么,可以用一句话总结:模块就是 Python 程序。换句话说,任何 Python 程序都可以作为模块,包括在前面章节中写的所有 Python 程序,都可以作为模块。将 Python 代码写到一个文件中,但随着程序功能的复杂,程序体积会不断变大,为了便于维护,通常会将其分为多个文件(模块),这样不仅可以提高代码的可维护性,还可以提高代码的可重用性。代码的可重用性体现在,当编写好一个模块后,只要编程过程中需要用到该模块中的某个功能(由变量、函数、类实现),无需做重复性的编写工作,直接在程序中导入该模块即可使用该功能。

前面讲了封装,并且还介绍了很多具有封装特性的结构,比如说:

  • 诸多容器,例如列表、元组、字符串、字典等,它们都是对数据的封装;
  • 函数是对 Python 代码的封装;
  • 类是对方法和属性的封装,也可以说是对函数和数据的封装。

本节所介绍的模块,可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。

,已经看到使用 import 导入模块的语法,但实际上 import 还有更多详细的用法,主要有以下两种:

  1. import 模块名1 [as 别名1], 模块名2 [as 别名2],…:使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。
  2. from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…: 使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。同时,当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。

也可以一次导入多个模块,多个模块之间用逗号隔开。导入模块成员时,也可以为成员指定别名,form...import 导入模块成员时,支持一次导入多个成员。导入模块成员时,也可以为成员指定别名。

通常情况下,当使用 import 语句导入模块后,Python 会按照以下顺序查找指定的模块文件:

  • 在当前目录,即当前执行的程序文件所在目录下查找;
  • 到 PYTHONPATH(环境变量)下的每个目录中查找;
  • 到 Python 默认的安装目录下查找。

以上所有涉及到的目录,都保存在标准模块 sys 的 sys.path 变量中,通过此变量我们可以看到指定程序文件支持查找的所有目录。换句话说,如果要导入的模块没有存储在 sys.path 显示的目录中,那么导入该模块并运行程序时,Python 解释器就会抛出 ModuleNotFoundError(未找到模块)异常。

(1)模块文件的存储位置,可以临时添加到 模块.path 变量中,即向 模块.path 中添加所在目录;(2)将模块保存到指定位置;(3)设置环境变量

当我们向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线“_”或者双下划线“__”)开头的变量、函数和类。因此,如果我们不想模块文件中的某个成员被引入到其它文件中使用,可以在其名称前添加下划线。

除此之外,还可以借助模块提供的 __all__ 变量,该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。通过在模块文件中设置 __all__ 变量,当其它文件以“from 模块名 import *”的形式导入该模块时,该文件中只能使用 __all__ 列表中指定的成员。

2.包

包就是文件夹,只不过在该文件夹下必须存在一个名为“__init__.py” 的文件。这是 Python 2.x 的规定,而在 Python 3.x 中,__init__.py 对包来说,并不是必须的。包是一个包含多个模块的文件夹,它的本质依然是模块,因此包中也可以包含包。相比模块和包,库是一个更大的概念,例如在 Python 标准库中的每个库都有好多个包,而每个包中都有若干个模块。

查看模块成员可以使用dir()函数和__all__变量。

可以使用 help() 函数来获取指定成员(甚至是该模块)的帮助信息。查看具体成员的信息,是因为该成员本身就包含表示自身身份的说明文档(本质是字符串,位于该成员内部开头的位置)。无论是函数还是类,都可以使用 __doc__ 属性获取它们的说明文档,模块也不例外。help() 函数底层也是借助 __doc__ 属性实现的。

可以通过 __file__ 属性查找该模块(或包)文件所在的具体存储位置,直接查看其源代码。通过调用 __file__ 属性输出的绝对路径,我们可以很轻易地找到该模块(或包)的源文件。注意,并不是所有模块都提供 __file__ 属性,因为并不是所有模块的实现都采用 Python 语言,有些模块采用的是其它编程语言(如 C 语言)。


本文链接: http://www.dtmao.cc/news_show_2000021.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?