用户:
_Rise_查看:7 回复:10 评论:7 创建时间:2020-08-27T16:44:08
模块概述
模块,可以认为是一盒积木,通过它可以拼出某一主题的东西。这与函数不同,一个函数相当于一块积木,而一个模块可以包括很多函数,也就是很多积木。
在Python中,一个扩展名为.py的文件就称为一个模块。
1.创建模块
创建模块可以将模块中的相关代码编写在一个单独的文件中,并且将该文件命名为“模块名+.py”
*创建模块时,模块名不能为Python自带的标准库名称
2.使用import语句导入模块
创建模块后,就阔以在其他程序中使用该模块了。这可以用import语句实现,代码如下:
import name as sss
name为模块名称,sss是给模块起的别名,通过该别名也可以使用模块。
【示例】编写一个模块,在模块所在文件夹下创建“模块”文件,在该文件中导入模块“模块示例代码”,并执行模块中的f函数,“模块示例代码”代码如下:
def f():
a = input()
print(a)
“模块”代码如下:
import 模块示例代码
模块示例代码.f()
运行结果:

*在调用模块中的函数等时,需在名称前加入“模块名.”作为前缀
3.使用from……import语句导入模块
在使用import语句导入模块时,每执行一条import语句都会创建一个新的命名空间,并且在该命名空间执行与py文件相关的所有语句。如果不想在每次导入模块时创建一个新的命名空间,而是将具体的定义导入当前命名空间中,这时可以使用form……import语句。使用form……import语句导入模块后,不需要再添加前缀。
from……import语句代码:
form name import member
其中,name为模块名称,member为需要导入的函数等,可以同时导入多个模块,中间有“,”分隔,如果想导入所有模块,可以用“*”代替。
例:
from Example import change #导入Example模块中的change函数
from Example import change,getW,getH #导入Example模块中的change,getH,getW函数
from Example import * #导入Example模块中的所有定义
*在使用from……import语句导入时,需注意模块名是当前命名空间唯一的,否则将出现冲突,后导入的会覆盖先导入的。如需导入两个名称一样的模块,这时就需要import语句导入了。
【错误示例】导入两个包括同名函数的模块
(1)“矩形模块”代码,用于计算矩形面积:
def mianji(w,h):
return w*h
if __name__ == '__main__':
print(mianji(10,20))
(2)“圆形模块”代码,用于计算圆形面积:
import math #导入标准库math
PI = math.pi #圆周率
def mianji(r):
return round(PI*r*r,2) #计算面积并保留两位小数
if __name__ == '__main__':
print(mianji(10))
(3)创建一个名称为“模块”的py文件,导入圆形模块和矩形模块的全部定义,再输出,代码:
from 矩形模块 import* #导入矩形模块
from 圆形模块 import* #导入圆形模块
if __name__ =='__main__':
print('圆的面积:',mianji(1000)) #调用计算圆的面积的函数
print('矩形的面积:',mianji(10,100000)) #调用计算矩形的面积的函数
执行以上代码后,会出现以下结果:

从上图可以看出,后导入的圆形模块mianji函数覆盖了先导入的矩形模块mianji函数。解决该问题的方法是,不使用from……import语句导入,改用import语句导入。修改后代码如下:
import 矩形模块 as c #导入矩形模块
import 圆形模块 as r #导入圆形模块
if __name__ =='__main__':
print('圆的面积:',r.mianji(1000)) #调用计算圆的面积的函数
print('矩形的面积:',c.mianji(10,100000)) #调用计算矩形的面积的函数
运行结果如下:

蒟蒻OIer1048576而且,尽量避免名字冲突
# mj就是面积
from math import pi
def mj(a,b = None):
if b is None:
return round(pi*a**2,2)
else:
return a*b点赞0
评论