Python 模块
- 模块化:将一个完整的程序分解成一个个小模块
- 优点:方便开发和维护、提高代码的重复利用率
- 在 python 中一个文件就是一个模块
# 新建一个文件 test2.py
print('我是一个模块')
模块的使用
引入模块
-
文件导入模块后,就会执行模块里面的非函数内容
-
语法 :import 模块名 ( python 文件名 )
# 新建一个文件 test2.py
print('我是一个模块')
# 在其他文件中
import test2
# ---------- 输出 ----------
# 我是一个模块
- 语法2 :import 模块名 as 模块别名
- 引入后就可以用模块别名调用模块
# 在其他文件中
import test2 as module1
# ---------- 输出 ----------
# 我是一个模块
- 不管输入多少个 import,模块最终都只导入一次
- 模块自己输出 __ name __ ,返回的是 __ main __ 。这时模块自己就是主模块。
- 可以通过在模块内部输出 __ name __ ,在其他模块中获取该模块的文件名 ( 模块名 )
# 在模块 test2.py 中
print(__name__)
# ---------- 输出 ----------
# __main__
# 在其他文件中
import test2
import test2
# ---------- 输出 ----------
# test2
调用模块
- 调用变量:模块名 . 变量名
- 调用函数:模块名 . 函数名 ( )
- 调用类:模块名 . 类名 ( )
# 在模块 test2.py 中
var = 5
def fun1():
print('函数fun1已被执行', end=';')
class Person():
def __init__(self):
self.name = 'superman'
# 在其他文件中
import test2 as module
print(module.var, end=';') # 调用变量
module.fun1() # 调用函数
man = module.Person() # 调用类
print(man.name)
# ---------- 输出 ----------
# 5;函数fun1已被执行;superman
from … import … 语句
- 语法1 :from 模块名 import 变量, 函数名, 类名…
- 用于引入模块的部分内容
- 此时调用可以直接用变量名、函数名()、类名()
# 在模块 test2.py 中
def fun1():
print('函数fun1已被执行', end=';')
from test2 import fun1
fun1()
# ---------- 输出 ----------
# 函数fun1已被执行;
- 语法2 :from 模块名 import 内容 as 别名
from test2 import fun1 as fff
fff()
# ---------- 输出 ----------
# 函数fun1已被执行;
- 语法3 :from 模块名 import *****
- 用于导入模块的全部内容,开销较大,一般不这样使用
from test2 import *
fun1()
# ---------- 输出 ----------
# 函数fun1已被执行;
- 主模块中如果有与其他模块的函数同名的函数,写在后面的同名函数会覆盖前面的同名函数
# 在模块 test2.py 中
def fun1():
print('模块里的函数fun1已被执行', end=';')
- 先导入,后写:主模块的生效
from test2 import *
def fun1():
print('执行函数')
fun1()
# ---------- 输出 ----------
# 执行函数
- 先写,后导入:其他模块的生效
def fun1():
print('执行函数')
from test2 import *
fun1()
# ---------- 输出 ----------
# 模块里的函数fun1已被执行;
- 这个时候就可以通过起别名,来解决同名函数的覆盖问题
main 函数
- 语法 :if __ name __ == “__ main __” : code block
- 使一些语句只在主模块内执行
# 在模块 test2.py 中
if __name__ == "__main__":
print('这里的语句只会在主模块内执行')
print('这里的语句会在其他模块里执行')
# ---------- 输出 ----------
# 这里的语句只会在主模块内执行
# 这里的语句会在其他模块里执行
import test2
# ---------- 输出 ----------
# 这里的语句会在其他模块里执行