第八篇模块与包
一.模块的使用之import
1.1什么是模块
模块就一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module
2.2使用模块
import 导入模块 首次导入模块发生三件事 1.创建一个模块的名称空间 2.执行模块对应文件,将产生的名字存放于1中的名称空间 3.在当前执行文件中拿到一个模块名,该模块名指向1的名称空间 import spam #强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件
分清楚被导入文件和导入文件
相关执行文件
import spam print(spam) print(spam.money) # spam.read1() # 模块中功能的执行始终以模块自己的名称空间为准 # read1=111111 # print(spam.read1) # money=1111111111111 # spam.read1() # read1=11111111111111111111111111 # spam.read2() # money=1111111111111111 # spam.change() # print(money) # spam.read1()
spam.py文件
money=1000 def read1(): print('spam模块.read1:',money) def read2(): print('spam模块.read2') read1() def change(): global money money=0
2.3为模块起别名
import spam as sm print(sm.money) sm.read1()
engine=input('>>: ').strip() if engine == 'mysql': import mysql as db elif engine == 'oracle': import oracle as db db.parse()
2.4一行导入多个模块(不推荐使用)
import spam,mysql,oracle # 推荐写成多行 import spam import mysql import orcacle
二.模块的使用之from...import
2.1首次导入模块发生三件事
首次导入模块发生三件事 1、创建一个模块的名称空间 2、执行模块对应文件,将产生的名字存放于1中的名称空间 提示:from....import...与import前两件事一模一样 3、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀
2.2注意
# 注意: # 1、同import,执行模块中的功能,始终以模块的名称空间为准 money=1111111111 change() print(money) #2、from ... import 名字,拿到的名字可以不加前缀直接使用,使用起来更加方便 # 当问题是容易与当前执行文件中相同的名字冲突 money=1111111111111111 print(money) read1=1111111 read1() # 起别名 from spam import money as m print(m) # 在一行导入多个 from spam import money,read1,read2 from ... import * from spam import * print(money) print(read1) print(read2) print(change) from spam import * print(money) print(read1) print(read2)
spam.py文件
#spam.py print('from the spam.py') __all__=['money','read1'] # from .. import * #指的是部分名字 money=1000 def read1(): print('spam模块.read1:',money) def read2(): print('spam模块.read2') read1() def change(): global money money=0
三.区分python文件的两种用途
spam.py文件
# print(__name__) # __name__的值 #1、在文件被直接执行的情况下,等于'__main__' #2、在文件被导入的情况下,等于模块名 if __name__ == '__main__': # print('文件被当中脚本执行啦。、。') read1() else: print('文件被导入啦')
其他文件
import spam #打印得到的是被导入的文件
四.模块的搜索路径
4.1模块的查找顺序
1.内存中已经加载的模块 2.内置模块 3.sys.path路径中包含的模块