首页 > 代码库 > 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[模块与包]