Python官方教程阅读总结-模块
模块(module):包含python语句的文件
模块的文件名:模块名.py
变量__name__的值记录了一个模块的文件名
1. 导入模块
假设有一个模块,文件名是demo.py, 该模块定义了两个函数,func1 和 func2
导入模块有以下几种常见的形式:
(1)import demo
调用模块中的函数就可以用 demo.func1(), demo.func2()
(2)import demo as d
这种方法导入模块的同时,用as 关键字给模块取了一个别名,方便后续的使用,这种情况下调用该模块下的函数就变为:d.func1(), d.func2()
(3)from demo import func1, func2
从demo模块中导入其中的两个函数,func1 和 func2。这种方法多用于一个模块下有多个函数以及类等,这些就可以把所需要用的函数给导入进去就可以,此时函数的调用也更加简单了,不用再加所在模块的模块名了,例如: func1(), func2()
(4)from demo import *
把demo模块下的所有非下划线‘_'开头的名称都导入进去,这样写会使代码书写比较方便,但一般不建议这样写,因为不知道都导入了哪些内容,不利于代码阅读。此时函数调用如上,可以直接 func1()
2. 以脚本方式执行模块
除了像上面那样导入模块,还可以以脚本方式执行模块,例如:
python demo.py 参数
执行模块的时候, 该模块的 __name__ 会被赋值为 “__main__”. 这就需要你在模块的末尾添加:
if __name__ == "__main__":
func1(参数)
这样就可以把模块以脚本的方式来执行,在这种情况下,import demo是不会执行该脚本的
3. 模块的搜索路径
当一个模块(如 demo)被导入的时候,解释器先会在内置模块中搜索该模块,如果没有找到就会从sys.path 定义的目录列表中去搜索(包括 脚本目录, pythonpath, 以及安装时的默认设置)
4. 模块的编译
为了加速python文件的载入速度,每个py文件编译后的版本会放置在一个名为__pycache__的缓存目录中,编译后的模块的文件名是 module.version.pyc
编译后的模块可以在各平台上运行
python在两种情况下不会检查编译缓存:(1)命令行直接导入的代码(2)没有源文件,无源文件的发行版
编译后的模块并不比未编译的读取速度更快,影响的只是文件的加载速度
5. 标准模块
python有自己的标准模块库,以提高执行效率,有些模块取决于平台,如winreg模块就只在windows平台上提供,sys 模块嵌入到每一个解释器中,sys.ps1 和 sys.ps2 分别定义了初级和次级提示字符,默认为 >>> 和 ... , sys.path 定义了模块的搜索路径。
6. dir() 函数
列出模块所有定义的名称,返回一个排序后的字符串列表,如:
dir(demo),
返回 [ '__name__', 'func1', 'func2' ]
如果 dir() 函数没有传递参数,就会返回当前所有定义的名称
import builtins
dir(buildtins) 会返回python内置的函数和变量名
7. 包 (package)
包是python中一种构造模块命名空间的方法,通过包名.模块名来调用模块,这样做的好处是使不同模块的作者不用担心模块名称一样,导入方法和上述导入模块的方法类似
当一个包下还有子包时, 子包之间可通过绝对路径来导入,也可通过相对路径来导入兄弟包中的函数等