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