模块
什么是模块?
模块:模块就是一系列功能的集合体。(模块里面装的就是提前开发好的功能)
为什么要用模块?
提高开发效率(因为模块中都是别人写好的功能我们可以直接拿来用的,节省了我们开发的时间)
模块的来源:
1、内置模块(Python解释器自带的模块)
2、第三方模块(别人写好的我们可以直接拿来用的)
3、自定义模块(自己写的,也可以传到网上让别人使用)
模块存在的形式:
1、自己写在.py文件里面的,就是一个模块
2、包:
就是一系列模块的集合体就称之为包
# 在python3中的包,一般里面会有一个__init__.py文件
"""
从今天开始学习完模块的使用后,以后在编写一些复杂项目的复杂功能的时候,我们就可以先想想有没有可以用的模块,如果有就可以直接拿来使用,如果没有,只能自己写了
"""
import句式
学习模块之前必须要搞明白谁是执行文件、谁是导入文件
import md # import + 模块名字(文件名字)注意一定不要加.py的文件名后缀,只写文件名即可
这时候这个md.py文件就是导入文件,import当前所在的文件就是执行文件
"""
首次导入文件,会执行导入文件的代码
导入文件不管你导入几次,都只执行一次
导入文件的过程发生了什么事?
1. 运行执行文件,产生执行文件的全局名称空间
2. 运行md.py文件,会产生md文件的全局名称空间,把md文件里的名字都丢到md的全局名称空间去
3. 在执行文件中有一个md的变量,指向导入文件的空间地址
4. 以后我们在执行文件中就可以用md来点出导入文件中的名字
导入文件之后,以后在用导入文件中的名字,只需要使用md点语法的形式点出来就可以
不会与执行文件中的名字发生冲突,因为我们是指名道姓的取值
"""
执行文件:
import exercise04
print(exercise04.money) # 10
导入文件:
print('index')
money = 99
def index():
global money
money = 10
index()
from...import...句式
语法:
from + 模块名字 + import + 变量名字
执行文件:
from exercise04 import inner, money
# print(money)
inner() # inner index outer
print(money) # 99
import exercise04
print(exercise04.money) # 10
导入文件:
money = 99
def index():
print('index')
global money
money = 10
outer()
def inner():
print('inner')
index()
def outer():
print('outer')
from md import money,index,outer '''连续导入'''
"""
from...import...句式
首次导入也会执行导入文件
导入多次,也会执行一次
发生了什么事?
1. 运行执行文件,产生执行文件的全局名称空间
2. 运行导入文件md.py, 产生md文件的全局名称空间,然后把md中所有的名字都丢到md的全局名称空间中去
3. 在执行文件中有一个变量money指向导入文件中money的空间地址
4. 我们要想使用导入文件的money,直接用money即可,不再使用md.money了,此时,只是把导入文件的money导入到了执行文件,其他都没有
导入文件之后,就有可能发生执行文件中的名字和导入文件中的名字产生冲突,此时,会使用当前执行文件中的名字
"""
__all__ = []:用法
'__all__ '是配合*使用的,如果你只想执行导入文件中的某一个功能,就在'__all__ '后面的列表中添加你要执行的功能
执行文件:
from exercise04 import * # * 代表执行exercise04里面的全部文件
导入文件:
__all__ = ['index' ] # 只执行index文件
money = 99
def index():
print('index')
global money
money = 10
index()
def inner():
print('inner')
inner()
def outer():
print('outer')
outer()
这时候除了index功能以外其他的功能都没有办法执行
导入模块的扩展用法
1、起别名:
import testttttttttttt as t
print(t.name) = print(testttttttttttt.name)
2、连续导入:
import md, time, os, sys
import md
import time
import sys
import os
'这两种写法都是等价的'
判断文件类型
print(__name__, type(__name__)) # __main__ <class 'str'>
import main
"""
__name__:
如果在执行文件中打印,结果就是字符串类型的 __main__
如果是在导入文件中打印,结果就是文件名或者叫模块名
"""
循环导入
"""如果在你的程序里面出现了循环导入的问题,说明你的程序设计的不合理!"""
# 我们遇到循环导入的问题必须处理掉,否则代码会报错,不能正常运行
如何解决循环导入的问题
1. 把导入语句放到代码的最下面
# 虽然问题解决了,但是不推荐,我们一般把导入语句都放在文件的开头
2. 函数式
模块的查找循序
关键字:
'sys path'
查找顺序:
"""
1. 先从内存中查找
2. 再从内置模块中查找
3. 从环境变量sys.path中查找(重要)
4. 如果以上都找不到,则报错!
"""
sys.path列表中的第一个元素永远是:当前文件所在的路径
sys.path列表中的第二个元素是:项目的路径,他是pycharm给你加的
添加自定义模块到环境变量中:
1. 把路径添加到sys.path中去
sys.path.append(r'D:\python26\day19\aaa')
import m3
print(m3.name)
2. from 模块1.模块2.模块3 import...句式
# from aaa.bbb import m3
from aaa.bbb.ddd import m3
print(m3.name)