注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蜻蜓点水 举重若轻

君子终日乾乾

 
 
 

日志

 
 

import 初探之一 —— 导入 Package

2006-10-30 17:20:14|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

酒壮熊人胆


    两杯红酒下肚,乘兴便打开这个盒子 —— 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 文件会在导入时被执行。

  评论这张
 
阅读(1228)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017