Python基础day-16[模块与包],,模块:  模块的好处


模块:

  模块的好处:首先模块可以大大提高代码的可维护性,其次可以减少大量的重复代码,可以通过模块调用来重复使用某些代码。另外,模块还可以避免函数名和变量名冲突。

  在Python中一个.py文件就称之为一个模块(module)。

  模块分类:

    Python标准库(内置库)

    第三方模块

    应用程序自定义模块

导入模块

  注:模块的在import的时候,会执行模块内的所有代码,并新建一个名称空间保存这些。类似变量,重复导入同一模块,不会重复执行模块内代码。

  所以导入时进行了两步操作:

    1.创建新的名称空间

    2.执行被调用的模块(执行模块的内容)

方式:
import os #第一种导入方式,每个import后面跟一个模块名。import sysimport os,sys #第二种导入方式,import后面跟模块名,可以使用逗号隔开每个模块。

模块的搜索路径:

  模块搜索时会优先搜寻Python标准库(内置库)--->应用程序自定义模块--->第三方模块

使用sys.path查看路径

import sysprint(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.pyfrom module1from module1100Process finished with exit code 0

关于模块的变量和执行文件的变量:

自定义模块内容:x = 100   #和执行文件内的变量x同名,数值不同def module1():    print(‘from module1 %s‘,x)执行文件内容:x = 99   #变量x在 导入模块之前先定义from new import module1,xmodule1()print(x)执行结果:D:\Python\Python36-32\python.exe E:/Python/Test/t.pyfrom module1 %s 100100   #打印模块内的变量x数值Process finished with exit code 0执行文件内容:from new import module1,xx = 99   #x在导入模块后定义module1()print(x)执行结果:D:\Python\Python36-32\python.exe E:/Python/Test/t.pyfrom module1 %s 10099   #显示执行文件内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 logfrom other import userlog.log1()user.user()执行结果:D:\Python\Python36-32\python.exe E:/Python/DAY-16/day16_练习.pyfrom logfrom userProcess finished with exit code 0
以bin目录下的bin.py为程序入口。import sysimport osres = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   #获取程序根目录,根目录为bin目录的父目录。#__file__ 获取当前文件名字sys.path.append(res)   #添加根目录路径到sys.path中,目的为了让import 在导入模块时能找到包的位置。print(sys.path)  #打印显示sys.pathfrom logger import log    #from  包名   import  模块名   <=== 导入模块的格式from other import userlog.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 userProcess finished with exit code 0

调用包中包的模块: 如下图 logger下还有个t4包。

技术分享

import sysimport osres = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(res)# print(sys.path)from logger import logfrom logger.t4 import t4   #from 包名.包名 import 模块名。 调用logger包下的t4包里面的t4模块from other import userlog.log1()user.user()t4.t4()   #执行t4模块功能执行结果:D:\Python\Python36-32\python.exe E:/Python/DAY-16/bin/bin.pyfrom logfrom userfrom t4   #结果Process finished with exit code 0

Python基础day-16[模块与包]

评论关闭