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 文件会在导入时被执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值