目录
一、模块的基本介绍
1、模块是什么?
1)模块是一个py文件,后缀名.py
2)模块可以定义函数、类和变量,模块里也可能包含可执行的代码
2、模块的作用有哪些?
1)当函数、类、变量很多时,可以很好的进行管理
2)开发中,程序员可以根据业务需求,把同一类型的功能代码,写到一个模块文件中,既方便管理,又方便调用
3)一个模块就是一个工具包,供程序员开发使用
4)Python自带标准模块库,每个模块可以帮助程序员快速实现相关功能
3、快速入门
# jack_module.py
# 定义函数 hi
def hi():
print("hi,jack")
# 模块可以定义函数、类和变量,模块里也可能包含可执行的代码
# tom_module.py
# 定义函数 hi
def hi():
print("hi,tom")
# use_.py
# 导入模块(文件)
import jack_module
import tom_module
# 使用 jack_module模块中的 hi函数
jack_module.hi()
# 使用 tom_module模块中的 hi函数
tom_module.hi()
二、导入模块-import
1、基本语法
[from 模块名] import (函数 | 类 | 变量 | *) [as 别名]
1)[ ]是可选项
2)可以根据需求,选择合适的形式导入
2、实例演示
1)导入一个或多个模块
import 模块
import 模块1,模块2, .....
- 导入一个或多个模块,建议导入多个模块时,还是一行导入一个模块
- 使用:模块.xx 方式来使用相关功能,表示层级关系,即模块中的xx
- import 语句通常写在文件的开头
# 导入模块
# import 模块名
import math
import random
# 得到一个数的绝对值
print(math.fabs(-11.2))
# 从列表中随机返回一个元素
print(random.choice(['apple', 'pear', 'banana']))
2)导入模块的指定功能
from 模块 import 函数、类、变量
- 导入模块指定功能
- 使用:因为导入了具体函数、类、变量,直接使用即可,不需要再带模块名
# from 模块 import 函数、类、变量
from math import fabs
# 返回x的绝对值
print(fabs(-11.2))
3)导入模块的全部功能
from 模块 import *
- 导入模块全部功能
- 使用:直接使用,不需要带模块名
# 导入模块的全部功能
from math import *
# 返回x的绝对值
print(fabs(-123)) # 123.0
# 返回 x的平方根
print(sqrt(9)) # 3.0
4)给导入的模块或者功能取别名
import 模块 as 别名
from 模块 import 函数、类、变量.. as 别名
import 模块 as 别名:给导入的模块取别名,使用:别名.xx
from 模块 import 函数、类、变量.. as 别名:给导入的某个功能取别名,使用时,直接用别名即可
# 给导入的模块或功能取别名
# import 模块 as 别名
import random as r
# from 模块 import 函数、类、变量.. as 别名
from math import fabs as f
print(r.choice([100, 200, 300]))
print(f(-900))
三、自定义模块
1、基本说明
1)自定义模块:在实际开发中,Python提供的标准库模块不能满足开发需求,程序员需要一些个性化的模块,就可以进行自定义模块的实现
2)在前面的快速入门中,我们已经实现了简单的自定义模块
2、注意事项和细节
1)使用__name__可以避免模块中的测试代码的执行
# cx_module.py
def hi():
print("cx,hi")
def ok():
print("cx,ok")
# 有时我们在模块中,会写一下测试代码
hi()
# a.py
from cx_module import *
hi()
ok()
# 运行a.py有出现什么情况?
# 当导入模块文件时,也会执行测试代码
运行a.py有出现什么情况?
当导入模块文件时,也会执行测试代码
思考:如何解决导入模块文件,会执行测试代码的情况?
答:
# 如果我们并不希望,导入模块时,去执行测试代码hi(),就可以使用__name__
# 当一个Python模块被导入时,__name__会被设为模块的名称
# 如果直接执行__name__会被设置为__main__
# cx_module.py
def hi():
print("cx,hi")
def ok():
print("cx,ok")
# 有时我们在模块中,会写一下测试代码
# 如果当前文件的__name__的值为__main__才执行
if __name__ == '__main__':
hi()
# a.py
from cx_module import *
hi()
ok()
2)使用__all__可以控制import*时,哪些功能被导入,注意:import 模块 方式,不受__all__的限制
# cx_module.py
def hi():
print("cx,hi")
def ok():
print("cx,ok")
# 有时我们在模块中,会写一下测试代码
# 如果当前文件的__name__的值为__main__才执行
if __name__ == '__main__':
hi()
# 在cx_module.py中使用了__all__=['ok']
# 在其他文件中使用 from cx_module import * 只会导入ok()
# 注意:import 模块 方式,不受__all__的限制
__all__=['ok']
# a.py
# 注意:import 模块 方式,不受__all__的限制
from cx_module import *
# hi() # 不能被导入
ok()