模块与包

2021-12-13 09:48:10
admin
1221
最后编辑:admin 于 2022-11-24 20:28:40

将函数存储在模块

在 python 中,模块是一个独立的文件,包含特定功能的代码(变量、函数、类),下文以函数为例讲解。

在主程序中,我们可以 import 语句将模块导入进来并使用其代码。

导入方式有两种:

1.导入整个模块:

import  模块文件名

导入该模块后,便可在程序中使用该模块的所有函数。要调用被导入模块中的函数,可指定被导入的模块的名称和函数名,并用句点分隔。(调用变量或类同理)

模块名.方法名()

2.导入特定的函数:

from 模块名 import 方法名

如果是从同一模块中导入多个指定函数,则多个函数用逗号分隔,如果要导入模块中的所有函数,也可以直接用星号 *。

from 模块名 import 方法名1, 方法名2, 方法名3
from 模块名 import *

使用这种导入方法时,调用函数时无需使用句点,直接使用其函数名()即可。

注:

第2种导入方法知道即可,并不推崇。对于导入模块的方式,最佳的做法是:要么只导入需要使用的函数,要么导入整个模块并使用句点调用。

as 别名

在导入模块时,使用 as 可以为模块起一个别名,方便使用(尤其是模块名称很长的时候)。

import 模块名 as 新名
新名.方法()

Python中 模块就是各种不同的 .py 文件,我们可以把不同的模块(文件)整理放在不同的文件夹下进行分类。而这个文件夹其实就是所谓的“包”,包可以嵌套。Python 中包的标志是在该文件夹下创建一个 __init__.py 的空文件。

必须要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包。

sound/                          
      __init__.py              
      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/                
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

包的用户可以从包中导入单个模块,例如:

import sound.effects.echo

这会加载子模块 sound.effects.echo 。但引用它时必须使用它的全名。

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

导入子模块的另一种方法是(推荐)

from sound.effects import echo

这也会加载子模块 echo ,并使其在没有包前缀的情况下可用,因此可以按如下方式使用:

echo.echofilter(input, output, delay=0.7, atten=4)

另一种形式是直接导入所需的函数或变量:

from sound.effects.echo import echofilter

同样,这也会加载子模块 echo,但这会使其函数 echofilter() 直接可用:

echofilter(input, output, delay=0.7, atten=4)

注意:当使用 from package import item 时,item可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数,类或变量。 import 语句首先测试是否在包中定义了item;如果没有,它假定它是一个模块并尝试加载它。如果找不到它,则引发 ImportError 异常。

相反,当使用 import item.subitem.subsubitem 这样的语法时,除了最后一项之外的每一项都必须是一个包;最后一项可以是模块或包,但不能是前一项中定义的类或函数或变量。

标准模块

Python 自带一个标准模块的库,些模块是内嵌到编译器里面的,一个特别值得注意的模块 sys,它被内嵌到每一个 Python 编译器中。

变量 sys.path 是字符串列表,用于确定解释器的模块搜索路径。