`
daniel_tu
  • 浏览: 182524 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

import 初探 —— 导入 Package

阅读更多

    众所周知,import 也许是 Python 中最平淡无奇、最道貌岸然的东西了。它总是用一种呆滞木然的眼神看着身怀绝技的道友们玩出各种花招、翻云覆雨,却从来是不动声色……这却越来越像是一个阴谋了!

 

    曾经,我也在江湖上听说过 import,它似乎是 Python 的基本语句,用于导入包(Package),或者模块(Module)到当前的作用域里来,这样我们就可以在程序中调用这些包和模块了。好象还真没见它做过什么出格的事情来呢。

 

    通常模块是后缀为 ".py"、".pyo"、".pyc"、".pyd"、".so"、".dll" 这样的文件。啊哈,导入模块还是挺简单的,就连我这种初学者都烂熟于心咯。只是那个 Package……




 

    包通常总是一个目录,目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。差不多就像这样吧:

Package1/ __init__.py
          Module1.py
          Module2.py

Package2/ __init__.py
          Module1.py
          Module2.py


 

我们可以就这样导入一个包:

import

 Package1 

 

或者调入一个子模块和子包:

from

 Package1 import

 Module1
from

 Package1 import

 Package2
import

 Packag1.Module1
import

 Packag1.Package2

 

可以深入好几层包结构:

from

 Package1.Package2 import

 Module1
import

 Package1.Package2.Module1

 

大致就这样吧,我觉得,包的精髓应该是在 __init__.py 这个文件之中的。




__init__.py 文件

 

__init__.py 控制着包的导入行为。假如 __init__.py 为空,那么仅仅导入包是什么都做不了的。

>>>

 import

 Package1
>>>

 Package1.Module1
Traceback (most recent call last):
 File "<pyshell#1>", line 1, in ? 
 Package1.Module1

AttributeError: 'module' object has no attribute 'Module1'


 

我们需要在 __init__.py 里把 Module1 预先导入:

#文件 __init__.py


import

 Module1

 

测试:

>>>

 import

 Package1
>>>

 Package1.Module1
<module 'Package1.Module1' from 'Module.pyc'>


 

__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:

from

 Package1 import

 *

 

这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:

#文件 __init__.py


__all__ = ['Module1'

, 'Module2'

, 'Package2'

]

 

测试:

>>>

 from

 Package1 import

 *
>>>

 Module2
<module 'Package1.Module2' from 'Module.pyc'>


 

__init__.py 文件会在导入时被执行。

分享到:
评论

相关推荐

    Psd Import 1.6.unitypackage

    Psd Import 1.6.unitypackage

    wordpress数据导入插件WP All Import Pro v4.6.9

    WP All Import 旨在高效处理大型导入——它将大型导入文件拆分为更小的块——即使在共享主机上也可以导入具有数百兆数据和数十万条记录的文件。 WordPress XML 导入?WordPress CSV 导入?使用 WP All Import 很容易...

    欧柏泰克:Java包的静态导入import static和import的区别

    静态导入是使用import static语句来实现的,其语法为:import static package.class.*;或者import static package.class.staticMember;其中,package.class是要导入的类,*表示所有静态成员,staticMember是要导入的...

    package和import的使用.pdf

    在编程语言中,如Java,`package`和`import`是两个重要的概念,它们帮助我们更好地管理和使用类库。在Delphi这样的面向对象的编程环境中,尽管语法可能有所不同,但基本理念是相似的。 首先,让我们理解`package`。...

    java中package和import的作用

    在Java编程语言中,`package`和`import`是非常重要的两个概念,它们分别用于组织代码结构和引入外部类或包,对于理解Java程序的模块化和包管理机制至关重要。 ### Java中的Package #### 1. Package的概念 在Java中...

    unity2018 package manager引入本地包Demo

    点击"Import"按钮,Package Manager会将本地包的所有内容导入到当前项目中。 5. **使用包**:导入完成后,你可以在项目中像使用任何其他Unity包一样使用它,包括引用脚本、添加资源或组件。 在本Demo中,你将发现...

    protobuf导入定义(import)

    在protobuf中,“导入”(import)是一个关键概念,它允许你在一个.proto文件中引用另一个.proto文件中的定义。这样,你可以在多个文件之间共享消息类型、枚举或服务定义,避免代码重复,提高代码的可维护性和组织性...

    Python使用import导入本地脚本及导入模块的技巧总结

    本文将深入探讨如何使用`import`来导入本地脚本以及导入模块,同时提供实用技巧和注意事项。 首先,当需要导入位于同一目录下的本地Python脚本时,你可以直接使用`import`关键字,后跟脚本的名称,不包括`.py`扩展...

    vite5+vue3+ import.meta.glob动态导入vue组件

    而 `import.meta.glob` 是 Vite 提供的一个强大特性,用于动态导入资源,尤其是适用于处理 Vue 组件的动态导入。 `import.meta.glob` 是 Vite 的一个元信息对象,它可以用来动态导入项目中的所有匹配指定模式的文件...

    CSharp_import_export_Excel.rar_Csharp Excel_c# import_c# 导入excel

    本示例"**CSharp_import_export_Excel.rar**"显然是一个关于如何在C#中进行Excel数据操作的代码集合。 首先,我们要了解C#中与Excel交互的两种主要方式:使用Microsoft Office Interop库和使用第三方库。Interop库...

    DataBinding 架构组件 ② - DataBinding 布局中使用 import 标签导入 Java、Kotlin 类

    【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 ) https://hanshuliang.blog.csdn.net/article/details/129773150 一、...

    1_import requests #导入请求包.ini

    1_import requests #导入请求包.ini

    详解Node中导入模块require和import的区别

    Node.js 中导入模块 require 和 import 的区别 Node.js 中的模块化编程是基于 CommonJS 规范的,而在 ES6 中,则是基于 ES6 模块标准的。在 Node.js 中,我们使用 require 函数来导入模块,而在 ES6 中,我们使用 ...

    neo4j-admin import导入工具csv导入及参数说明

    ### neo4j-admin import工具详解:CSV导入及参数说明 #### 概述 `neo4j-admin import` 是Neo4j数据库系统中的一个强大工具,用于将外部数据(如CSV文件)导入到Neo4j图数据库中。此工具提供了一系列灵活的选项来...

    import turtle#导入python中的画画工具包.py

    import turtle#导入python中的画画工具包.py

    java-package与import机制

    ### Java Package与Import机制详解 #### 一、引言 对于很多刚开始接触Java编程的初学者来说,往往是从购买一本入门书籍开始他们的Java学习之旅。在这个过程中,他们可能会下载最新的Java SDK并安装在自己的电脑上...

    DBImport_V3 数据库导入导出,转文档工具

    《DBImport_V3:数据库导入导出与文档转换利器》 DBImport_V3是一款高效实用的数据库管理和转换工具,专为IT专业人士设计,提供数据库数据的导入导出以及格式转换功能。这款工具支持多种数据库系统,包括但不限于...

    Atom-import-js,简化导入js模块的工具。对Galooshi/Import的贡献.zip

    这个项目提供了类似的功能,但Atom-import-js将这些功能带入了更直观的交互环境——Atom编辑器,使得开发者在编写代码时就能实时享受到便捷。 使用Atom-import-js不仅节省时间,还有助于提高代码的一致性和可读性。...

    python中import与from方法总结(推荐)

    模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或from)。 包(package): 包是更大的组织单位,用来组织区别管理多个模块文件。 import 用来导入模块 from 用于从模块...

    要使用`import type`导入的Autofix TypeScript类型-JavaScript开发

    要使用“导入类型”导入的Autofix TypeScript类型ts-import-types-cli要使用插入类型导入的Autofix TypeScript类型,安装npm install -g ts-import-types-cli用法用法:ts-import-types-cli [选项] [模式...]选项:-...

Global site tag (gtag.js) - Google Analytics