模块与包
- 2021-12-13 09:48:10
- admin
- 1616
- 最后编辑: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 是字符串列表,用于确定解释器的模块搜索路径。