Python模块
什么是模块?
Python模块(Module),是一个Python文件,以.py结尾
模块能定义函数、类和变量,模块里也能包含可执行的代码
模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能,比如实现和实践相关的功能就可以使用time模块,我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用,进而实现各种不同的功能。
简言之:模块就是一个Python文件,里面有类、函数、变量等,我们可以拿过来用(导入模块去使用)
模块的导入方式
模块在使用前需要先导入 导入的语法如下:
[from 模块名] import [模块 | 类 | 变量 | 函数 | *][as 别名]
//上面的中括号 在语法中表示可选的意思(即 from,as可以不写,import必须写
常用的组合形式如:
- import 模块名
- from 模块名 import 类、变量、方法等
- from 模块名 import *
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
(1)import 模块名
基本语法:
import 模块名 import 模块名1, 模块名2 模块名.功能名()
案例:导入time模块
# 导入时间模块 import time # 导入Python内置的time模块(time.py这个代码文件) print("开始") # 让程序睡眠1秒(阻塞) time.sleep(1) # 通过.点就可以使用模块内部的全部功能(类、函数、变量) print("结束")
(2)from 模块名 import 功能名
基本语法:
from 模块名 import 功能名 功能名()
案例:导入time模块中的sleep方法
# 使用from导入time的sleep功能(函数) from time import sleep print("你好") sleep(5) print("hi")
(3)from 模块名 import *
基本语法:
from 模块名 import * 功能名()
案例:导入time模块中的所有方法
# 导入时间模块中所有的方法 from time import * # *表示全部的意思 print("hii") sleep(5) # 和第一种导入方法相比较:都可以导入模块中的全部方法,但上面的方式在使用时要加上【模块名.】而本方法不需要 print("hiii")
(4)as定义别名
基本语法:
# 模块定义别名 import 模块名 as 别名 # 功能定义别名 from 模块名 import 功能 as 别名
案例:
# 用as给特定功能加上别名 # 模块别名 import time as t print("start") t.sleep(2) print("end") # 功能别名 from time import sleep as sl print("111") sl(2) print("22")
小结
注意事项:
- from可以省略,直接import即可
- as可以省略
- 通过"."来确定层级关系
- 模块的导入一般写在代码文件的开头位置
自定义模块
制作自定义模块
Tip:每个python文件都可以作为一个模板,模块的名字就是文件的名字,也就是说 自定义模块名必须要符合标识符命名规则
# my_module1.py文件里的内容 def test(a, b): print(a + b)
# 导入自定义模块使用 # 01 # import my_module1 # my_module1.test(1, 2) # 02 # from my_module1 import test # test(1, 2)
**注意事项:**当导入多个模块的时候,且模块内有同名功能,当调用这个同名功能的时候,调用到的是后面导入的模块的功能
# my_module1.py文件里的内容 def test(a, b): print(a + b)
# my_module2.py文件里的内容 def test(a, b): print(a - b)
# 导入不同模块的同名功能 from my_module1 import test from my_module2 import test test(1, 2) 运行结果: -1
测试模块
__main__
- 不希望在导入模块时,执行测试内容的解决办法:
通过”__main__
“变量去解决的
在pycharm中输入main,会弹出提示,直接回车会弹出需要的if语句
将用于测试的test函数调用放在if判断语句中
- 在当前文件内直接运行时,内置变量
__name__
的名称会标记成main
则 此时if为True ->测试代码就会执行 - 但是,当我们以from形式导入模块时,在新文件中运行,name就不再为main,此时if为False,则不会运行
# my_module1.py文件里的内容 def test(a, b): print(a + b) if __name__ == '__main__': test(1, 2)
# __main__变量 from my_module1 import test
__all__
如果有一个模块文件中有__all__
变量,当使用from xxx import *导入时,只能导入这个列表中的元素
因为*代表所有,而所有来自all的定义
all中只有test_a,那么*里也只有test_a
# my_module1.py文件里的内容 __all__ = ['test_a'] def test_a(a, b): print(a + b) def test_b(a, b): print(a * b)
# __all__变量 from my_module1 import * test_a(2, 1) test_b(2, 1) # 此时这一行会报错 # 此处手动导入test_b是可以的,因为all只是限制了*涵盖的内容
小结
- 如何自定义模块 并导入?
在Python代码文件中正常写代码即可,通过import、from关键字和导入Python内置模块一样导入即可使用 __main__
变量的功能是?if __main__ == "__main__"
表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法执行- 注意事项
不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的