示例:example/day06
Python 模块(Module),是一个 Python 文件,以
.py结尾,包含了Python 对象定义和Python语句
想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下
import module1[, module2[,... moduleN]引入指定的模块
一个模块只会被导入一次,不管你执行了多少次import
使用import语句的时候,涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块,
搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']sys.path 输出是一个列表,其中 第一项是空串
'',代表 当前目录
from 语句让你从模块中
导入一个指定的部分到当前命名空间中
from modname import name1[, name2[, ... nameN]]把一个模块的
所有内容全都导入到当前的命名空间
注意
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用 __name__ 属性来使该程序块仅在该模块自身运行时执行
注意
⚠️ : 每个模块都有一个__name__属性,当其值是__main__时,表明该模块自身在运行,否则是被引入
略
包是一种管理 Python 模块 命名空间 的形式,采用 点模块名称
比如一个模块的名称是
A.B, 那么他表示一个包 A中的子模块 B
考虑一个在 package_example 目录下的 runoob1.py 、runoob2.py 、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下:
注意 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块
简单来说,包就是文件夹,但该文件夹下必须存在
__init__.py文件, 该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。
示例:example/day06
test.py
package_example
|-- __init__.py
|-- runoob1.py
|-- runoob2.py
import sound.effects.echo这将会导入子模块: sound.effects.echo 他必须 使用全名 去访问:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)还有一种导入子模块的方法是
from sound.effects import echo直接导入一个函数或者变量
from sound.effects.echo import echofilter注意 from package import item 这种形式的时候,对应的item既可以是 包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量
导入语句遵循如下规则:如果包定义文件
__init__.py存在一个叫做__all__的列表变量,那么在使用from package import *的时候就把这个列表中的所有名字作为包内容导入。
略