文章目录
1、模块的定义
(1)模块是一个包含 Python 代码的文件,扩展名为 .py。
(2)作用
代码组织:将功能相关的代码放在同一个文件中。
命名空间隔离:避免全局变量和函数名冲突。
复用性:模块可以在多个程序中导入和使用
2、导入模块
(1)import 模块名
导入整个模块,通过模块名访问其内容:
定义一个名为:math_utils的.py文件
def add(a, b):
return a + b
def mulitiply(a, b):
return a * b
将math_utils导入test02文件,代码和执行结果如下:
import math_utils
num = math_utils.mulitiply(2, 4)
print("2,4两者乘积是:", num)
add = math_utils.add(5, 4)
print("5,4两者之和是:", add)
(2)from 模块名 import 函数/类/变量
导入模块中的特定内容,直接使用具体的变量、函数和类名访问。
from math_utils import add
add1 = add(2, 3)
print("两者之和:", add1)
直接导入math_utils 的add函数。
(3)from 模块名 import *
导入模块中的所有内容(不推荐,可能导致命名冲突)。
原因是后导入的同名变量、函数或者类会覆盖先导入的。
from math_utils import *
add1 = add(2, 3)
print("两者之和:", add1)
mulitiply1 = mulitiply(2, 3)
print("两者之积:", mulitiply1)
练习题:创建两个模块,一个是矩形模块,一个是圆形模块,两个都包含周长和面积计算函数,在另一个python文件中导入这两个模块,并调用相应的函数计算周长和面积。
juxing.py
def girth(width, height):
return (width + height) * 2
def area(width, height):
return width * height
if __name__ == '__main__':
print(area(10, 20))
yuanxing.py
import math
PI = math.pi
def girth(r):
return round(2 * PI * r, 2) # round()函数用于保留小数位数
def area(r):
return round(PI * r * r, 2)
if __name__ == '__main__':
print(area(10))
compute.py
from juxing import *
from yuanxing import *
if __name__ == '__main__':
print("圆形的周长是:", girth(10))
print("矩形的周长是:", girth(10, 20))
运行结果:
有报错,矩形模块的girth()函数被圆形的girth()函数覆盖导致。解决方案,不使用from import * ,使用import
import juxing
import yuanxing
if __name__ == '__main__':
print("圆形的周长是:", yuanxing.girth(10))
print("矩形的周长是:", juxing.girth(10, 20))
补充:关于__name__ == 'main’的含义:
用于判断当前模块是被直接运行还是被其他模块导入。
每个模块都有一个内置的 name 属性:
(1)当模块被直接运行时,name 的值为 ‘main’。
(2)当模块被其他模块导入时,name 的值为模块的名称(即文件名,不含 .py)
将juxing.py中的代码修改如下:
def girth(width, height):
return (width + height) * 2
def area(width, height):
return width * height
if __name__ == '__main__':
print(__name__)
else:
print("被其他模块导入:", __name__)
直接运行juxing.py,运行结果为:
运行compute.py,运行结果如下:
(4)import 模块名 as 别名
为模块指定别名,简化访问。
import math_utils as mu
print("两者之和:", mu.add(2, 6))
3、python中的包
包(Package)是组织模块的一种方式,用于将相关的模块按层次结构分组,提高代码的可维护性和复用性。避免命名冲突。
包目录必须包含 init.py 文件(可以为空),用于标识该目录是一个 Python 包。 在 init.py中编写的代码,再导入包时自动执行。
(1)使用包
a、通过“import + 完整包名 ”导入整个包
b、通过"from + 完整包名 + import + 模块名“加载指定的模块
c、通过"from + 完整包名.模块名 + import + 模块名“加载指定的模块
第三方模块的下载与安装:
pip 模块名 install:用于安装第三方模块
pip 模块名 uninstall:用于卸载第三方模块
pip list:用于显示已经安装的第三方模块