import 初探之一 —— 导入 Package
来源:互联网 发布:琅琊榜台湾知乎 编辑:程序博客网 时间:2024/06/06 01:00
酒壮熊人胆
两杯红酒下肚,乘兴便打开这个盒子 —— import。
众所周知,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 文件会在导入时被执行。
- import 初探之一 —— 导入 Package
- import 初探之一 —— 导入 Package
- 黑马程序员—Java面向对象(异常处理机制、package包、import导入包、jar包)
- Java package包,导入包import
- Kotlin-05.包和导入(package & import)
- python的package import 以及相对导入和绝对导入
- Java面向对象4——package和import语句
- Java包——package和import的区别
- package&import
- package&&import
- package 、import
- Package & import
- package import
- package &import
- Untiy导入package时报错Failed to import package with error: Couldn't decompress package
- 黑马程序员——第10天——(面向对象)包package,包与包之间的访问,导入import
- python——import导入模
- 6、@Import注解——导入资源
- 关于CListCtrl中处理选中多行数据的问题
- [转贴]位段结构体 和 结构体内存分配问题
- 正则表达式基础
- 文件夹右键菜单没有共享和安全的解决办法
- JS 保留字
- import 初探之一 —— 导入 Package
- android 项目中 Unparsed aapt error(s)! Check the console for output错误解决方法(转)
- 关于WinSock.h和WinSock2.h的重复定义问题
- asp 用split出现null无效的问题
- c语言中setjmp与longjmp(4)
- cognos使用流程
- 简单生活
- debug release 的区别
- frame与iframe的区别