10、模块
10.1 模块概述
一个函数相当于一个积木,一个模块中可以包含很多函数。在Python中,一个扩展名为.py的文件就称为一个模块。
通常把能够实现某一特定功能的代码放置在一个文件中作为一个模块,方便其他程序和脚本导入并使用。
10.2 自定义模块
- 创建模块
将模块中相关的代码编写在一个单独的文件中,并且将该文件命名为“模块名+.py”。
- 使用import导入模块
import modulename as alias:导入模块,起别名
创建用于计算BMI指数的模块,命名为bmi.py:
def fun_bmi(person, height, weight):
print(person + '的身高:' + str(height) + '米\t体重:' + str(weight) + '千克')
bmi = weight / (height * weight)
print(person + '的BMI指数是:' + str(bmi))
创建main.py文件,导入bmi模块:
import bmi
bmi.fun_bmi('bernardo', 1.72, 62.5)
'''
bernardo的身高:1.72米 体重:62.5千克
bernardo的BMI指数是:21.12628447809627
'''
在调用模块中的变量、函数或者类时,需要在变量名、函数名或者类名前添加“模块名.”作为前缀。如果比较长不容易记住,则使用import bmi as m这样的语法给模块名字起别名,方便记忆。
- 使用
from...import导入模块
这样就无需在使用的时候添加前缀,直接访问具体的变量、函数和类名等即可。
from modulename import *:从模块中导入全部定义。
from bmi import *
fun_bmi('bernardo', 1.72, 62.5)
'''
bernardo的身高:1.72米 体重:62.5千克
bernardo的BMI指数是:21.12628447809627
'''
导入两个包括同名函数的模块,分别定义名为rectangle.py和circle.py两个文件,文件内容如下:。
rectangle.py:
def girth(width, height):
return (width + height) * 2
def area(width, height):
return width * height
if __name__ == '__main__':
print(area(10, 23))
'''
230
'''
circle.py:
import cmath
def girth(r):
return 2 * cmath.pi * r
def area(r):
return cmath.pi * (r ** 2)
if __name__ == '__main__':
print(area(12))
'''
452.3893421169302
'''
compute.py
from rectangle import *
from circle import *
if __name__ == '__main__':
print('圆周长是:', girth(10))
print('矩形周长是:', girth(12, 13))
'''
圆周长是: 62.83185307179586
TypeError: girth() takes 1 positional argument but 2 were given
'''
显然上述程序报错,原因是想要执行矩阵模块中的函数被圆的模块中的函数覆盖了,解决方法就是不使用from...import语句的导入,直接使用import语句导入,修改后为:
import rectangle as r
import circle as c
if __name__ == '__main__':
print('圆周长是:', c.girth(10))
print('矩形周长是:', r.girth(12, 13))
'''
圆周长是: 62.83185307179586
矩形周长是: 50
'''
10.2.4 模块搜索目录
当使用import语句导入模块时,默认情况下,会按照以下顺序进行查找。
- 在当前目录(即执行的Python脚本文件所在目录)下查找。
- 到PYTHONPATH(环境变量)下的每个目录中查找.
- 到Python的默认安装目录下查找。
import sys
for i in sys.path: # 将列表中的每一项打印出来
print(i)
'''
C:\Users\包文强\Desktop\python练习\模块练习
C:\Users\包文强\Desktop\python练习
C:\Users\包文强\Desktop\TianChi_YiDongTuiJian_forecast-master\venv\Scripts\python35.zip
D:\Anaconda3\envs\tf2\DLLs
D:\Anaconda3\envs\tf2\lib
D:\Anaconda3\envs\tf2
C:\Users\包文强\Desktop\TianChi_YiDongTuiJian_forecast-master\venv
C:\Users\包文强\Desktop\TianChi_YiDongTuiJian_forecast-master\venv\lib\site-packages
D:\Anaconda3\envs\tf2\lib\site-packages
D:\Anaconda3\envs\tf2\lib\site-packages\win32
D:\Anaconda3\envs\tf2\lib\site-packages\win32\lib
D:\Anaconda3\envs\tf2\lib\site-packages\Pythonwin
D:\PyCharm 2018.1.4\helpers\pycharm_matplotlib_backend
'''
本文深入探讨Python模块,涵盖模块概述、如何创建自定义模块以及模块的搜索目录。通过实例展示了如何避免导入冲突,并解释了import语句的使用方式,包括导入指定模块、给模块起别名以及导入所有定义。
378

被折叠的 条评论
为什么被折叠?



