首页 > 代码库 > Python基础day-16[模块与包]
Python基础day-16[模块与包]
模块:
模块的好处:首先模块可以大大提高代码的可维护性,其次可以减少大量的重复代码,可以通过模块调用来重复使用某些代码。另外,模块还可以避免函数名和变量名冲突。
在Python中一个.py文件就称之为一个模块(module)。
模块分类:
Python标准库(内置库)
第三方模块
应用程序自定义模块
导入模块
注:模块的在import的时候,会执行模块内的所有代码,并新建一个名称空间保存这些。类似变量,重复导入同一模块,不会重复执行模块内代码。
所以导入时进行了两步操作:
1.创建新的名称空间
2.执行被调用的模块(执行模块的内容)
方式:
import os #第一种导入方式,每个import后面跟一个模块名。 import sys import os,sys #第二种导入方式,import后面跟模块名,可以使用逗号隔开每个模块。
模块的搜索路径:
模块搜索时会优先搜寻Python标准库(内置库)--->应用程序自定义模块--->第三方模块
使用sys.path查看路径
import sys print(sys.path) 执行结果: D:\Python\Python36-32\python.exe E:/Python/Test/t.py [‘E:\\Python\\Test‘, ‘E:\\Python‘, ‘D:\\Python\\Python36-32\\python36.zip‘, ‘D:\\Python\\Python36-32\\DLLs‘, ‘D:\\Python\\Python36-32\\lib‘, ‘D:\\Python\\Python36-32‘, ‘C:\\Users\\ldsly\\AppData\\Roaming\\Python\\Python36\\site-packages‘, ‘D:\\Python\\Python36-32\\lib\\site-packages‘] #标红的路径是pycharm自己加上的project路径。实际在别的地方不会存在这个路径。 Process finished with exit code 0
设置别名:
import sys as abc #使用as 来设置别名 print(abc.path) #使用方式跟原模块一样只是名字变了而已。 执行结果: D:\Python\Python36-32\python.exe E:/Python/Test/t.py [‘E:\\Python\\Test‘, ‘E:\\Python‘, ‘D:\\Python\\Python36-32\\python36.zip‘, ‘D:\\Python\\Python36-32\\DLLs‘, ‘D:\\Python\\Python36-32\\lib‘, ‘D:\\Python\\Python36-32‘, ‘C:\\Users\\ldsly\\AppData\\Roaming\\Python\\Python36\\site-packages‘, ‘D:\\Python\\Python36-32\\lib\\site-packages‘] Process finished with exit code 0
模块的调用:
自定义模块new内的函数和变量: def module1(): print(‘from module1‘) x = 100 注:new模块和执行文件在同一目录。 执行文件内容: import new #正常导入模块 new.module1() #正常调用 from new import module1,x #导入模块的功能,如果想导入模块内所有的功能可以 直接写个 * 号(慎用) module1() #直接执行函数功能(函数功能会去自己模块内寻找数据,像两个瓶子的东西,不会跟当前配置文件相关数据冲突。下面举例) print(x) 执行结果: D:\Python\Python36-32\python.exe E:/Python/Test/t.py from module1 from module1 100 Process finished with exit code 0
关于模块的变量和执行文件的变量:
自定义模块内容: x = 100 #和执行文件内的变量x同名,数值不同 def module1(): print(‘from module1 %s‘,x) 执行文件内容: x = 99 #变量x在 导入模块之前先定义 from new import module1,x module1() print(x) 执行结果: D:\Python\Python36-32\python.exe E:/Python/Test/t.py from module1 %s 100 100 #打印模块内的变量x数值 Process finished with exit code 0 执行文件内容: from new import module1,x x = 99 #x在导入模块后定义 module1() print(x) 执行结果: D:\Python\Python36-32\python.exe E:/Python/Test/t.py from module1 %s 100 99 #显示执行文件内x的数值 Process finished with exit code 0
import 方式无此问题。
import new
x = 99
new.module1()
执行结果:
D:\Python\Python36-32\python.exe E:/Python/Test/t.py
from module1 %s 100
Process finished with exit code 0
包:
按目录组织模块的方法,称为包(Package)。在Python中,包可以理解为一个文件夹,但是这个文件夹中必须要有一个__init__文件。
调用包的时候还执行了一下__init__文件。
包的建立使用:如下建立目录,在目录下建立__init__.py文件,这就是一个包了,然后把模块放入包内。
在程序中调用包内的模块:
day16_练习.py为程序入口时。 from logger import log from other import user log.log1() user.user() 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-16/day16_练习.py from log from user Process finished with exit code 0
以bin目录下的bin.py为程序入口。 import sys import os res = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #获取程序根目录,根目录为bin目录的父目录。#__file__ 获取当前文件名字 sys.path.append(res) #添加根目录路径到sys.path中,目的为了让import 在导入模块时能找到包的位置。 print(sys.path) #打印显示sys.path from logger import log #from 包名 import 模块名 <=== 导入模块的格式 from other import user log.log1() #调用模块的功能 user.user() 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-16/bin/bin.py #下方 标红的为添加的路径 [‘E:\\Python\\DAY-16\\bin‘, ‘E:\\Python‘, ‘D:\\Python\\Python36-32\\python36.zip‘, ‘D:\\Python\\Python36-32\\DLLs‘, ‘D:\\Python\\Python36-32\\lib‘, ‘D:\\Python\\Python36-32‘, ‘C:\\Users\\ldsly\\AppData\\Roaming\\Python\\Python36\\site-packages‘, ‘D:\\Python\\Python36-32\\lib\\site-packages‘, ‘E:\\Python\\DAY-16‘] from log from user Process finished with exit code 0
调用包中包的模块: 如下图 logger下还有个t4包。
import sys import os res = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(res) # print(sys.path) from logger import log from logger.t4 import t4 #from 包名.包名 import 模块名。 调用logger包下的t4包里面的t4模块 from other import user log.log1() user.user() t4.t4() #执行t4模块功能 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-16/bin/bin.py from log from user from t4 #结果 Process finished with exit code 0
Python基础day-16[模块与包]