python语法之模块
1、定义
是一系列功能的结合体,本质上一个个的.py文件,相当于模块包着一堆函数体代码。
2、三种来源
2.1、python内置的模块:time , os ,sys, turtle 等
2.2、第三方模块:requests
2.3、自定义模块:自己写的.py文件
3、四种表现形式
3.1、使用python编写的文件
3.2、编译后共享的库DLL或C或C++库
3.3、包下面带有__init__一组.py文件
3.4、python解释器下的.py文件-------- python解释器下的文件夹-----------一个个的py文件
ps:包指的是内部包含__init__.py文件夹。
包的作用:存放模块,包可以更好的管理模块。
4、为什么要使用模块
模块可以更好地帮我们管理功能代码,比如函数,变量名...
可以将项目拆分成一个个的功能,分别存放在不用的py文件(模块)中。
5、模块的使用
鼠标右键创建py文件,在py文件中编写python代码。
在一个文件中,通过import 关键字导入模块。注意:import 导入模块时,模块名不能.py后缀。
当首次导入模块时,会做三件事:
1 执行源文件代码
2 产生一个新的名称空间用于存放源文件执行过程中产生的名字
3 在当前执行文件所在名称空间中得到一个名字func,改名字指向新创建的模块名称空间,若要引用模块名臣空间中的名字,需要加上该前缀,如下
import os #导入模块 os.open() #调用模块os中的open函数
加上os. 作为前缀就相当于说明要引用os名称空间中的名字。
强调:第一次导入模块已经将其加载到内存空间了,之后的重复导入会直接引用内存中已存在的模块,不会重复执行文件。
6、import语句导入多个模块
6.1、import语句
import module1 import module2 import module3 #或 import module1,module2,module3
不建议第二种方式,第一种更规范,可读性更强。
'''
分类导入:
1. python内置模块 2.第三方模块 3.自定义模块 '''
文件开头导入模块属于全局作用域,在函数体内导入模块属于局部作用域。
6.2、from-import语句
from os import open,remove,rename open() rename() remove() #无前缀的好处是代码更简洁,但是容易与当前名称空间中的名字冲突, # 如果当前名称空间存在相同名字,后定义的名字会覆盖之前定义的名字。
6.3、其他导入语法as
import os as o o.rename()
7、循环导入问题
解决方案1:导入语句放到最后,保证在导入时,所以名字都已经加载过
解决方案2:导入语句放到函数中,只有在调用函数时才会执行其内部代码
8、区分py文件的两种用途
一种被当程序/脚本执行,一种被当模块导入。区分方法:每个py文件内置的__name__变量,该变量在py文件中当脚本执行时赋值为__main__,当模块导入时赋值为模块名。
if __name__ == '__main__': foo.py被当做脚本执行时运行的代码 else: foo.py被当做模块导入时运行的代码