模块

包和模块

包:包里面可以有多个子包,子包里面又可以有多个模块;
模块:一个.py文件就是一个模块。

一般包目录下都会定义__init__.py ,在__init__.py中存在一个叫做 __all__的列表变量,在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入;如果__all__没有定义,那就不会导入任何模块。

一种可能的包的结构(sound包):

sound/                          顶层包
      __init__.py               初始化 sound 包
      formats/                  文件格式转换子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  filters 子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

记录一些遇到的问题,
假设现在有这样一个包:


ani 包中的 cat 模块里有say()函数定义,如何在tree模块和peo模块中进行调用呢,或者说如何导入cat模块?

peo模块导入cat模块:

# 1
import ani.cat
ani.cat.say()
cat.say()  # 错误!

# 2
import ani.cat as cat
cat.say()

# 3
from ani.cat import say
say()

# 4
from ani import cat
cat.say()

tree模块导入cat模块:

# 错误的相对引用
from ..ani import cat  # 错误!
cat.say() 

ImportError: attempted relative import with no known parent package


from ani import cat  # 正确
cat.say()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • If you quit from the Python interpreter and enter it agai...
    linyk3阅读 389评论 0 0
  • 模块和包 一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是...
    go以恒阅读 2,303评论 0 4
  • 一般项目中模块一般会分布在文件系统的不同路径中。Python解释器找到某个模块并将其导入命名空间会遵循一定...
    mysimplebook阅读 1,652评论 0 0
  • Python的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的...
    蝴蝶兰玫瑰阅读 466评论 0 2
  • 概·念 我们在平时生活中,经常会被人劝说要:活在当下。这也曾使很多人都感动的热泪盈眶。那么,如果我们一直被困住永恒...
    JY_Design阅读 493评论 0 0