本篇主要为python 模板介绍和使用,包含如何创建和使用自定义模块,引入模块的方式及包内容介绍。
概述
在项目开发中随着代码量越来越多,代码就会越来越难以维护。为了解决难以维护的问题,我们把很多相似功能的函数分组,分别放到不同的文件中去。这样每个文件所包含的内容相对较少,而且对于每个文件的大致功能可用文件名来体现。很多编程语言都是这么来组织代码结构。对于python:一个.py文件就是一个模块。
优点
提高代码的可维护性
提高了代码的复用性,同一个模块,可以被多个功能引用。
引用其他的模块(内置模块、三方模块和自定义模块)避免函数名和变量名的冲突
自定义模块
创建自定义模块
在当前目录下创建teacher.py,并创建了一个方法,打印一些字符串用于显示。
示例如下:
# 一个.py文件就是一个模块
name = 'teacher'
def say_common_in():
print('进来,准备上课!')
def say_lecture():
print('开始上课,这节课我们来讲一讲...')
def say_end():
print('下课了,同学们再见!')
引入自定义模块
在同级目录中创建一个新的.py文件,用于引入模块和调用。
引入自定义模块,不用加.py后缀,下面以import引入方式为例。
示例如下:
import teacher
注意:一个模块只会被引入一次,不论添加了多少个import。
这是为了防止模块被多次引入。
使用模块中的内容
使用模块中的方法
格式:模块名.函数名()
示例如下:
teacher.say_common_in()
teacher.say_lecture()
teacher.say_end()
# 执行结果
# 进来,准备上课!
# 开始上课,这节课我们来讲一讲...
# 下课了,同学们再见!
使用模块中的变量
格式:模块名.变量名
示例如下:
print(teacher.name)
# 执行结果
# teacher
引入模块方式
import语句
格式:import module[, module2 [, module3[,......,modulen]]]
示例如下:
import teacher
import os, time, datetime
from...import语句
作用:从模块中导入一个指定的部分到当前命名空间
格式:from module import name[, name2[....,namen]]
示例如下:
from teacher import say_common_in
say_common_in()
# 执行结果
# 进来,准备上课!
注意
调用未引入的函数
没有引入say_end函数
示例如下:
say_end()
执行结果
Traceback (most recent call last):
File "E:\lianxipy\day5\使用from...import.py", line 14, in <module>
say_end()
NameError: name 'say_end' is not defined
设置同名函数
若在当前文件中定义函数与引入模块中函数同名则会覆盖掉。
示例如下:
from teacher import say_common_in
def say_common_in():
print('这是一个新方法!')
say_common_in()
# 执行结果
# 这是一个新方法!
from...import *语句
from...import * 语句把一个模块中所有的内容全部导入当前的命名空间
示例如下:
from teacher import *
say_common_in()
say_lecture()
say_end()
# 执行结果
# 进来,准备上课!
# 开始上课,这节课我们来讲一讲...
# 下课了,同学们再见!
注意:最好不要过多使用。
__name__属性
模块就是一个可执行的.py文件,一个模块被另外一个程序引入。
如果不想模块中的某些代码执行,可以用__name__属性来使程序仅调用模块的一部分。
修改teacher
每个模块都有一个__name__属性,当其值等于“__main__”时,表名该模块自身在执行。
示例如下:
# 一个.py文件就是一个模块
name = 'teacher'
def say_common_in():
print('进来,准备上课!')
def say_lecture():
print('开始上课,这节课我们来讲一讲...')
def say_end():
print('下课了,同学们再见!')
# 每个模块都有一个__name__属性,当其值等于“__main__”时,表名该模块自身在执行。
if __name__ == '__main__':
print('自己执行')
执行teacher.py
执行结果
自己执行
在其他文件中调用是不会执行此打印。
包
为了解决模块名称的冲突,引入了按目录来组织模块的方法,称为包。
特点
引入了包以后,只要顶层的包不与其他包冲突,那么模块都不会与别的模块发生冲突。
创建包
选中当前目录后【右击】选择new中的【Python Package】选项,创建包。
如下图:
创建后出现__init__.py文件
引入包中模块
包中的teacher.py是之前创建的,分别复制后放入a、b包中。然后引用包中的teacher模块。
示例如下:
import a.teacher
import b.teacher
使用模块方法
分别调用a、b包中的teacher的say_common_in()方法,也不会产生冲突。
因为它们现在分别属于不同的命名空间中,是相互独立,互不干涉的。
示例如下:
# 调用a包中teacher模块的函数
a.teacher.say_common_in()
# 调用b包中teacher模块中的函数
b.teacher.say_common_in()
# 执行结果
# 进来,准备上课!
# 进来,准备上课!
注意
目录只有包含一个“__init__.py”的文件才会被认作是一个包,
主要是为了避免一些滥竽充数的名字,
暂时这个文件中不需要写东西。
总结
本篇主要为python 模板介绍和使用,包含如何创建和使用自定义模块,引入模块的方式及包内容介绍。