一 模块的概念
1 模块的概念介绍
一个包含python代码的文件就是一个模块。
模块的作用:
1现在程序开发文件比较大,都放在一个文件中维护不方便,拆分成多个文件方便维护与管理
2模块可以增加代码的重用率
2 创建模块
模块本身就是一个文件,所有的py代码都可以在文件中直接书写,不过我们开发共用模块时,
最好在模块中书写一下内容。
变量 模块中的属性值
函数 单独的功能
类 相似的功能组合
模块测试代码 临时使用,被导入时不会执行
注意 :
(1)模块名称遵循标识符
(2)模块只有第一次被导入的时候执行,多次导入不会执行
例 model01.py 是一个简单的模块,这个模块的功能就是打招呼
假设此py文件的文件名是model01
print('我是一个具有独立功能的模块')
def say_hello():
print('你好,世界')
2模块的导入原理
原理介绍
1 模块导入会将要导入的文件执行一遍
2 导入模块的名称就是我们定义的脚本或者包的名称
3 我们导入模块的过程总结就是:在指定范围内搜索指定名称的python脚本或包,
将其运行,获取其中的方法
3 模块的导入方式
1、import 模块名
2、import 模块名 as 别名
3、import 模块名1,模块名2,... 一行导入多个模块。
4、from ... import ...
5、from ... import ... as 别名
6、from ... import 功能1,功能2,...
7、from ... import * 导入所有
1 import 模块名
作用
直接导入模块
1 import 模块名
作用 直接导入模块
import model01
print(model01.name)
print(model01.say_hello)
2、import 模块名 as 别名
import model01 as m
m.say_hello()
3、import 模块名1,模块名2,... 一行导入多个模块。
import model01,model02
model01.say_hello()
model02.func()
4、from ... import ... 局部导入方式
当时用模块中的部分功能的时候,就可以使用局部导入方式
form 模块 import 某个函数或者类。
作用 : 直接导入模块中的某个函数或者某个类或者变量
from model import say_hello
say_hello()
注意 如果当文件中的变量或者函数名称和模块中的名称重复,就会使用就近原则。
from model01 import say_hello
say_hello()
def say_hello():
print('hello python')
say_hello()
"""
我是一个具有独立功能的模块
你好,世界
hello python
"""
5、from ... import ... as 别名
当导入的模块和当前模块中的名称相同的时候可以起别名进行区分
如 from my_module import read1 as read
from model01 import say_hello as SayHello
def say_hello():
print('hello world')
SayHello()
say_hello()
"""
我是一个具有独立功能的模块
你好,世界
hello world
"""
6、from ... import 功能1,功能2,...支持导入多行
如 from my_model import read1,read2,money
from model02 import test1 , tese2
test1()
test2()
7、from 模块 import * 导入所有
from model02 import * 把model02 中所有的不是以下划线—开头的名字都导入到当前位置
大部分情况下我们的python程序不应该使用这种方式导入,因为*你不知道你导入的什么名字,
很有可能会覆盖掉你之前已经定义的名字。而且可读性极差。
作用 直接导入模块中所有的方法和类和变量
from model01 import *
tese1()
test2()
__all__属性
__all__ = [变量1,变量2....] 设置导入模块的功能。
__all__ = ['money','read1']
这样在另一个文件中用from my_model import *就只能导入列表中规定的两个名字
4.模块搜索路径
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
由sys模块的sys.path方法来规定
因为sys.path返回的数据类型是列表
1、列表可以修改、我们导入的范围也可以通过修改sys.path这个列表获得暂时的修改。例如通过 sys.path.append()添加目录,导入额外目录的模块。
2、列表是有序的,当搜索的过程当中,在第一个路径下搜索到了,就停止搜索。而且sys.path第一个路 径是脚本的当前路径,所以禁止大家讲自己的脚本命名成模块的名称。
因此需要注意的是:自己模块命名的时候不能和系统的模块名称相同。
5 pyc.临时文件
为了提高加载模块的速度,python解释器会在__pycache__目录中下缓存每个模块编译后的版本,之后,再次被导入时,实际上导入的是这个.pyc的临时文件。
6 把模块当做脚本运行
我们可以通过模块的全局变量__name__来查看模块名
当做脚本运行:
__name__的值等于 "__main__"
当做模块导入:
__name__的值等于模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':
pass