Python的Module和Package

Module
Python module就是一个普通的python脚本,也就是.py文件。Module让我们更好的组织相关的代码。例如,我们可以把数学运算相关的函数,变量,类等都放入math module。

创建一个mymodule.py文件,就定义了一个名为mymodule的module:

foo = 100 
def hello():
    print("i am from mymodule.py")

在其他python代码中,我们可以很方便导入这个module并使用其中的代码:

import mymodule
print(mymodule.foo)
print(mymodule.hello())

如果不想导入module中的所有逻辑,仅仅想导入一部分,则使用“from”关键字:

from mymodule import foo # 仅使用foo变量
print(foo)

Package
Package是用来组织项目中module的一种命名空间。同时Package可以是多层级结构,在文件系统中以多层目录的形式表达。
例如一个module名为A.B则意味着,module B属于package A。又如一个module名为A.B.C则意味着,A为第一级package,B为第二级package,C为module名称。
下面是一个package组织关系的例子:

sound/                          Top-level package
  __init__.py               Initialize the sound package
  formats/                  
          __init__.py
          wavread.py
          wavwrite.py
          ...
  effects/                  Subpackage for sound effects
          __init__.py
          echo.py
          ...
  filters/                  Subpackage for filters
          __init__.py
          equalizer.py
          vocoder.py
          ...

可以注意到每层package目录下都有一个__init__.py文件。Python发现__init__.py文件,就知道这是一个package。当导入一个package时,Python会查找sys.path中的所有目录和子目录。
大多数情况下__init__.py是空的,但也可以加入package初始化代码。这样当package被引用时,初始化代码会被执行。

用户可以导入package下特定的module:

import sound.formats.wavread
sound.formats.wavread.hello() # 注意这里需要把import后的内容都重复一遍,很不方便。因此:
import sound.formats.wavread as tag # 这样就方便多了。

另外一种写法:

from sound.formats import wavread
wavread.hello() # 这样就方便多了。

也可以导入特定module中的函数:

from sound.formats.wavread import echofilter
echofilter() # 可以直接调用函数了。

在__init__.py中使用__all__参数:

__all__ = ["echo", "surround", "reverse"]

上面的语句表示,当运行“from sound.effects import *”时,导入"echo", “surround”, "reverse"3个module。也就是说import * 表示导入__all__指定的所有module。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值