来源:TechWeb.com.cn

设想一下,如果我们使用 from sound.effects import *会发生什么?Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们都导入进来。

但是很不幸,这个方法在 Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统。

在这类平台上,没有人敢担保一个叫做 ECHO.py 的文件导入为模块 echo 还是 Echo 甚至 ECHO。

(例如,Windows 95就很讨厌的把每一个文件的首字母大写显示)而且 DOS 的 8+3 命名规则对长模块名称的处理会把问题搞得更纠结。

为了解决这个问题,只能烦劳包作者提供一个精确的包的索引了。

导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

作为包的作者,可别忘了在更新包之后保证 __all__ 也更新了啊。你说我就不这么做,我就不使用导入*这种用法,好吧,没问题,谁让你是老板呢。这里有一个例子,在:file:sounds/effects/__init__.py中包含如下代码:

这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。

如果 __all__ 真的没有定义,那么使用from sound.effects import *这种语法的时候,就不会导入包 sound.effects 里的任何子模块。他只是把包sound.effects和它里面定义的所有内容导入进来(可能运行__init__.py里定义的初始化代码)。

这会把 __init__.py 里面定义的所有名字导入进来。并且他不会破坏掉我们在这句话之前导入的所有明确指定的模块。看下这部分代码:

这个例子中,在执行 from...import 前,包 sound.effects 中的 echo 和 surround 模块都被导入到当前的命名空间中了。(当然如果定义了 __all__ 就更没问题了)

通常我们并不主张使用 * 这种方法来导入模块,因为这种方法经常会导致代码的可读性降低。不过这样倒的确是可以省去不少敲键的功夫,而且一些模块都设计成了只能通过特定的方法导入。

记住,使用 from Package import specific_submodule 这种方法永远不会有错。事实上,这也是推荐的方法。除非是你要导入的子模块有可能和其他包的子模块重名。

如果在结构中包是一个子包(比如这个例子中对于包sound来说),而你又想导入兄弟包(同级别的包)你就得使用导入绝对的路径来导入。比如,如果模块sound.filters.vocoder 要使用包 sound.effects 中的模块 echo,你就要写成 from sound.effects import echo。

无论是隐式的还是显式的相对导入都是从当前模块开始的。主模块的名字永远是"__main__",一个Python应用程序的主模块,应当总是使用绝对路径引用。

包还提供一个额外的属性__path__。这是一个目录列表,里面每一个包含的目录都有为这个包服务的__init__.py,你得在其他__init__.py被执行前定义哦。可以修改这个变量,用来影响包含在包里面的模块和子包。

这个功能并不常用,一般用来扩展包里面的模块。

python有三个包如何只导入两个包_云计算开发学习笔记:Python3如何从一个包中导入*...相关推荐

  1. python搞笑语句_云计算开发学习笔记:Python3 import语句

    原标题:云计算开发学习笔记:Python3 import语句 想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下: 当解释器遇到 import 语句,如果模块在当前的 ...

  2. python 云计算_云计算开发学习笔记:Python的环境搭建

    大家都知道学好Python是进入云计算领域的基础,那么在学习之前我们先来了解下Python环境是如何搭建的.Python可应用于多种平台,包括大家熟悉的Window,Linux 和 Mac OS X. ...

  3. python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介

    来源:TechWeb.com.cn Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以 ...

  4. python语言单行注释符_云计算开发学习笔记:Python3注释

    大家在学习各种编程语言的时候都会在代码里面添加一些注释,这个也是为了方便日后对代码的查找和修改,各种编程语言的注释方式略有不同,Python3语言也一样有自己的注释方式,下面我们来了解一下都有哪几种. ...

  5. Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐

    Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐 导入参考及数据 FILE IMPORT_REFERENCE导入参考的CAD文件如igs格式 括号内参数分别为(导 ...

  6. python 输入输出转web_云计算开发学习笔记:Python3 输入和输出方式

    Python两种输出值的方式: 表达式语句和 print() 函数.第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用. 如果你希望输出的形式更加多样,可 ...

  7. Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作

    Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作 移动/交换对象的顺序 移动对象的顺序 TREEVIEW FEATURE MOVE ( 1,2 ) 将索引号为1和2的特征交换位置 T ...

  8. 学习笔记之IP分片抓包实验

    学习笔记之IP分片抓包实验 摘要 分片实验 identification字段 附:`MTU`和`MSS` 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 2,M ...

  9. Windows驱动开发学习笔记(三)—— 内核空间内核模块

    Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...

最新文章

  1. hive中array嵌套map以及行转列的使用
  2. 分布式事务最终一致看这篇“大白话”的实践
  3. Qt工作笔记-Qt生成dll或so,并且调用(含Liunx端与Windows端)
  4. 虫食算(洛谷-P1092)
  5. 重新标注 ImageNet:多标签,全面提升模型性能
  6. 2021儋州市民族中学高考成绩查询,海南2021高考成绩排名查询,海南高考个人成绩排名如何查询...
  7. Head First设计模式读书笔记三 装饰模式(个人理解:包装模式)
  8. 页面跨域与iframe通信(Blocked a frame with origin)
  9. 02 ARM11 时钟初始化后的跑马灯程序
  10. Kotlin入门(29)任务Runnable
  11. 机器学习算法LR(logit regression逻辑回归)原理简单解析
  12. 学习笔记五(蜂鸣器实验按键输入实验)
  13. 硬实力,游戏机自己做,十个经典游戏机方案合集
  14. 孤立波matlab,色散方程的两个八点差分格式
  15. 氧化锆气体传感器行业调研报告 - 市场现状分析与发展前景预测
  16. win7万能声卡驱动_黑苹果常见 .kext 驱动解读下载
  17. 金蝶EAS设置ctx控制单元
  18. 纯思考:主观和客观中的观察者
  19. 机械硬盘插Android平板,【图】把android平板电脑装进车机 自己动手diy安卓车载电脑...
  20. 我们怎样识别图片上的文字?图片识别文字软件有哪些?

热门文章

  1. 昇腾万里·让AI无所不及!DevRun开发者沙龙在武汉成功举办
  2. 共建智慧云基石,阿里云携手英特尔走向数智未来
  3. 百度NLP“十年十人”重磅亮相,推出全球最大中文NLP数据共建计划“千言”
  4. 6 年成为 AIoT 独角兽,这位 17 年连续创业者是如何做到的?
  5. 数据科学家在“新常态”下发生了怎样的转变?
  6. 20000 字干货笔记,一天搞定 MySQL !
  7. 机器学习火热,SQL 开发人员有何用?
  8. 首提“智能X效应”,英特尔携手产业加速智能变革
  9. 国内 UOS 统一操作系统曝光;联想宣布要 All in 5G​;Android Studio 新版发布 | 极客头条...
  10. 一文详解 Java 的八大基本类型!