Python中的模块与包

Python中的模块和包是比较重要的概念。

模块是去掉.py扩展名的Python文件,比如myModule.py是Python文件,myModule是模块,在其他python文件中可以通过import myModule的方式导入模块,并使用导入的模块所定义的各种对象,包括类、函数以及变量等等。

模块是一个比较简单的概念,用起来也比较容易,读者如果感兴趣可以上网搜索,这里我重点介绍一下包的概念。

包是组织多个具有关联的模块的文件夹,在Python中,包与一般文件夹的区别是包目录下有一个__init__.py的文件,这个文件内容可以为空,也可以具有内容,它的作用是指示该文件夹是一个python包。

下面就以实例的方式讲解一下包:

下面是一个树形结构:

package1

      ------__init__.py

      ------subPack1

                    ------__init__.py

                    ------module_11.py

                    ------module_12.py

                    ------module_13.py

      ------subPack2

                    ------__init__.py

                    ------module_21.py

                    ------module_22.py

其中package1、subPack1、subPack2均为包,module_11、module_12、module_13、module_21、module_22均为模块。

在module_11.py中定义一个函数funcA:

def funcA():
    print "funcA in module_11"
    return

在python解释器中导入函数funcA

>>> from package1.subPack1.module_11 import funcA
>>> funcA()
funcA in module_11

或者导入包中的模块module_11

>>> from package1.subPack1 import module_11
>>> module_11.funcA()
funcA in module_11

注意:导入模块时,调用模块中的对象需要用到.符号,即模块.对象,以限定对象的范围

 

也许大家经常会发现,导入对象可以为通配符*。

>>> from package1.subPack1 import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> module_11.funcA()


Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    module_11.funcA()
NameError: name 'module_11' is not defined

我们通过dir命令查看到没有导入任何模块,而且使用module_11.funcA()后执行失败,提示module_11没有定义。

这里的玄机在于包中文件__init__.py中的__all__变量的内容,__all__中可以指定在使用通配符*导入时可以导入哪些模块。

我们在subPack1中的__init__.py文件中定义__all__变量的内容:
__all__=['module_11']

然后在解释器中导入通配符*

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> from package1.subPack1 import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'module_11']
>>> module_11.funcA()
funcA in module_11

从上面的步骤可以看出,只有变量__all__中指定的module_11被导入了,而没有指定的module_12和module_13没有被导入。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值