什么是模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py
。模块可以被别的程序引入(import
关键字),以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
模块实际上对应于程序文件
对比
- 容器 -> 数据的封装
- 函数 -> 语句的封装
- 类 -> 方法和属性的封装
- 模块 -> 程序文件
命名空间问题
分类:
- 内置命名空间(Built-in Namespaces):Python运行起来,它们就存在了。内置函数的命名空间都属于内置命名空间,所以,我们可以在任何程序中直接运行它们,比如
id()
,不需要做什么操作,拿过来就直接使用了。 - 全局命名空间(Module:GlobalNamespaces):每个模块创建它自己所拥有的全局命名空间,不同模块的全局命名空间彼此独立,不同模块中相同名称的命名空间,也会因为模块的不同而不相互干扰。
- 本地命名空间(Function & Class:LocalNamespaces):模块中有函数或者类,每个函数或者类所定义的命名空间就是本地命名空间。如果函数返回了结果或者抛出异常,则本地命名空间也结束了。
版权声明:本文为CSDN博主「老马的程序人生」的原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LSGO_MYP/article/details/102925235
程序在查询上述三种命名空间的时候,就按照从里到外的顺序,即:Local Namespaces --> Global Namesspaces --> Built-in Namesspaces,三种关系的递进通过.
操作符实现
很有意思的例子,再IDLE中
>>> str
<class 'str'>
>>> str=1
>>> str
1
>>> del str
>>> str
<class 'str'>
>>>
引入模块的方法
import 模块名
from 模块名 import 函数名
其衍生为:不推荐这种写法 from TemperatureConversion import *
容易造成混乱
import 模块名 as 新名字
if __name__ == '__main__'
判断当前执行的模块是否是主模块,也就是该模块并非由import
导入了其他程序,而是主要运行。
搜索路径
python在此路径寻找模块,该模块与环境变量设置有关(好像?—?),搜索路径被存储在 sys 模块中的 path 变量中。
import sys
print(sys.path)
# ['C:\\ProgramData\\Anaconda3\\DLLs', 'C:\\ProgramData\\Anaconda3\\lib', 'C:\\ProgramData\\Anaconda3', 'C:\\ProgramData\\Anaconda3\\lib\\site-packages',...]
包(package)
通过pip install
下载的模块实际上也大多就是包。
包一种文件路径结构:
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
...
目录只有包含一个叫做 __init__.py
的文件才会被认作是一个包,最简单的情况,放一个空的 __init__.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.echofilter(input, output, delay=0.7, atten=4)
或from sound.effects.echo import echofilter
则直接调用函数
echofilter(input, output, delay=0.7, atten=4)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
如果我们使用 from sound.effects import *
会发生什么?
Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们都导入进来。