什么是模块:模块是一系列功能的集合体,我们平时创建的.py文件就是一种模块形式
关于模块形式可以分为:
1.使用python语法编写的.py文件 2.已被编译为共享库或DLL的C或C++扩展
3使用C编写并链接到python解释器的内置模块 4.包
使用模块的好处:我们将常用的功能写成一个函数,用于解决代码冗余的问题,而当我们将一个程序按照类型分到不同的文件中时,模块使我们可以重复调用一个模块中的功能,减少代码冗余,使用第三方或者内置的模块可以提高开发效率
如何导入模块:
使用import 模块名
#创建两个.py文件 run.py 和 spam.py #其中run.py作为执行文件,内容为: import spam def func(): print('from run') #spam.py作为模块被导入,内容为: print('开始执行...') x = 1 def func(): print('from func') #执行run.py文件,运行结果: 开始执行...
整个过程为:1.当我们运行执行文件run.py的时候,申请了run的名称空间,用于存放执行run文件时产生的名字
2.当第一次导入模块时:a.先开辟了模块的名称空间 b.执行模块内的代码,将产生的名字存放于模块的名称空间 c.在执行文件中创建一个名字用于指向模块的名称空间
如何使用被导入模块
import spam def func(): print('from run') spam.func() #运行结果: 开始执行... from spam
使用模块名.的形式引用模块内的名称,这是一种指名道姓的调用方式,从运行结果来看,并没有与执行文件的func产生冲突。
此外,
1.我们可以同时导入多个模块(不推荐使用)
2.为导入的模块起别名(通过 as)
import time,os import spam as s print(os.listdir(r'D:\Program Files\python全栈\学习日记\模块篇')) print(time.time()) s.func()
import 小结:
使用import的优点:指名道姓的引用模块的变量名,不会与执行文件中的变量名产生冲突
使用import的缺点:每次引用变量名时,都得加上模块名点的形式,不简洁
使用from 模块名 import 变量名
from spam import func func() #运行结果:---> 开始执行... from spam
从执行结果来看,使用from导入模块的前两个步骤与使用import导入无差,只是第三步不同,from是在执行文件中创建一个变量名用于直接指向被导入模块的一个值的内存地址,but当执行文件中有相同的变量名时,会造成变量名冲突:
from spam import func def func(): print('from run') func() #执行结果: 开始执行... from run
from 与import一样可以同时导入多个模块,以及起别名
此外,当我们需要导入一个模块中绝大多数变量名时,可以使用*(默认代表所有)
from spam import* print(x) func() #执行结果: 1 from spam
当然,我们也可以使用内置的__all__来更改*所包含的变量名
__all__ = ['func'] x = 1 def func(): print('from spam') #在执行文件引用: from spam import* print(x) func() #执行结果: #NameError: name 'x' is not defined
from小结:
使用from的优点:相比于import更加简洁,每次直接使用变量名即可
使用from的缺点:当执行文件中拥有与被导入模块变量名相同时,会产生冲突