Python基础 —— 模块和包
Python基础 —— 模块和包
一、模块
一个模块就是一个包含了python定义和声明的文件,文件名是模块名+.py后缀。
随着程序的发展,功能越来越多,为了方便管理,通常将程序分成一个一个的文件,这样程序的结构更清晰,方便管理。这是我们不仅仅可以把这些文件当成脚本去执行,还可以作为模块导入到其他模块中,实现了功能的重复利用。
导入模块的方法
导入模块其实就是告诉Python解释器去解释那个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件
那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path
1.1 import语句
导入方法
# 导入一个模块 import module_name # 导入多个模块 import module1,module2 # 导入模块中指定的属性、方法(不加括号)、类 from module_name import * from module_name import module_element from module_name import module_element as new_name 使用别名时,使用"new_name()" 调用函数,文件中可以再定义一个"module_element"函数。
本质
创建一个名为"my_module"的py文件,
# my_module.py print("from the my_module.py") money = 100 def read1(): print("my_module -> read1 -> money",money) def read2(): print("my_module -> read2 calling read1") read1() def change(): global money money = 0
新建一个名为"my main"的py文件:↓↓↓
# my_main.py import my_module my_module.read1() my_module.change() my_module.read2() ''' 运行结果: from the my_module.py my_module -> read1 -> money 100 my_module -> read2 calling read1 my_module -> read1 -> money 0 '''
# my main.py
import my_module
如果main程序中只是将my_module模块导入进来,运行结果: from the my_module.py
模块中可以包含可执行的语句和函数定义,这些语句的目的是初始化模块。只在模块名第一次遇到import语句时才执行。
import语句针对同一个模块被import很多次,为了防止重复导入,python优化的手段是第一次导入后就将模块名加载到内存,后续的import语句仅是对已经加载到内存中的模块对象增加一次引用,不会重新执行模块内的语句。↓↓↓
# my_main.py
import my_module import my_module import my_module
# 运行结果:
from the my_module.py 仅打印一次
可以用sys.modules查看文件导入的模块
# my_main.py
import sys import my_module print(sys.modules)
1.2 导入优化
import module_name def a(): module_name.hello() print("fun a") def b(): module_name.hello() print("fun b") a() b()
多个函数需要重复调用同一个模块下的同一个方法,每次调用需要重复查找模块。可做如下优化:
1.3