美文网首页
模块和包

模块和包

作者: 开罗酒吧 | 来源:发表于2017-06-06 04:01 被阅读0次

封装包很简单。在文件系统上组织代码,并确保每个目录都定义了init.py文件

(https://img.haomeiwen.com/i5404975/b7ee232e7acbb9e7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果这样做了就可以如下导入文件:

import graphics.primitive.line
from graphics.primitive import line
import graphics.formats.jpg as jpg

文件init.py的目的是
要包含不同运行级别的包的可选的初始化代码。 举个例子,如果你执行了语句import graphics, 文件graphics/init.py将被导入,建立graphics命名空间的内容。像import graphics.format.jpg这样导入,文件graphics/init.py和文件graphics/graphics/formats/init.py将在文件graphics/formats/jpg.py导入之前导入。

绝大部分时候让init.py空着就好。但是有些情况下可能包含代码。 举个例子,
init.py能够用来自动加载子模块:

# graphics/formats/__init__.py
from . import jpg
from . import png

像这样一个文件,用户可以仅仅通过import grahpics.formats来代替import graphics.formats.jpg以及import graphics.formats.png。

敏锐的程序员会发现,即使没有init.py文件存在,python仍然会导入包。如果你没有定义init.py时,实际上创建了一个所谓的“命名空间包”,万物平等,如果你着手创建一个新的包的话,包含一个init.py文件吧。

2.如何控制模块被全部导入的内容

当使用’from module import *‘语句时,希望对从模块或包导出的符号进行精确控制。可以在你的模块中定义一个变量 all 来明确地列出需要导出的内容。

# somemodule.py
def spam():
pass
def grok():
pass
blah = 42
# Only export 'spam' and 'grok'
__all__ = ['spam', 'grok']

尽管强烈反对使用 ‘from module import *‘,但是在定义了大量变量名的模块中频繁使用。
如果你不做任何事,这样的导入将会导入所有不以下划线开头的。 另一方面,如果定义了all ,那么只有被列举出的东西会被导出。如果你将 all 定义成一个空列表,没有东西将被导出。 如果 all 包含未定义的名字,在导入时引起AttributeError。

3.使用相对路径名导入包中子模块

(https://img.haomeiwen.com/i5404975/7e0574544f79a14e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

# mypackage/A/spam.py
from . import grok

# mypackage/A/spam.py
from ..B import bar

4.如何合并多个文件合并成一个单一的逻辑命名空间
程序模块可以通过变成包来分割成多个独立的文件。考虑下下面简单的模块

image.png

假设你想mymodule.py分为两个文件,每个定义的一个类。要做到这一点,首先mymodule目录来替换文件mymodule.py。 这这个目录下,创建以下文件:

(https://img.haomeiwen.com/i5404975/75a4450c7e399a2c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

相关文章

  • 2018-08-13

    模块和包的定义 import 和 from import包和模块的引入import引入一个模块import 模块名...

  • 笔记:Python的包和模块的区别

    Python中的模块和包的英文表示: 模块的英文:Module 包的英文:Packages 对模块和包的类比理解:...

  • Python学习笔记7

    异常处理包和模块 包和模块的一般操作 导入操作的本质 模块检索的路径 导入模块的场景 第三方包和模块的安装 异常处...

  • 模块和包

    模块 1.一个python文件就是一个模块 当导入一个模块,就相当于执行了这个模块,创建该模块的命名空间,将模块中...

  • 包和模块

    1、包和模块 什么是包(lib)? 什么是模块(module)? 常见模块或者包的导入方式 1、如果是普通文件夹,...

  • 包和模块

    一、python中包和模块的区别: 1.包:包含 文件的文件夹,导入模块的可通过 变量。2.模块:编写python...

  • 模块和包

    封装包很简单。在文件系统上组织代码,并确保每个目录都定义了init.py文件 (http://upload-ima...

  • 包和模块

    1、python模块(module) 在计算机实际的开发过程中,随着代码量的不断增加,如果放在一个文件中会变得越来...

  • 模块和包

    包和模块: 包(lib):通常包总是一个目录,可以使用import导入包,或者from + import来导入包中...

  • 包和模块

    了解一个生态系统的关键是学习它的词汇。Node.js和npm有一个非常特别的包和模块的定义,很容易弄混淆。我们会在...

网友评论

      本文标题:模块和包

      本文链接:https://www.haomeiwen.com/subject/eitgfxtx.html