模块
模块
1.模块定义:
模块就是一系列功能的结合体(模块里面提前开发好的一堆功能)
2.模块的作用:提高了开发的效率
3.模块的来源:
1.内置的(python解释器自带的直接用的,eg:time)
2.第三方的(别人写好的放在网上,需下载使用)
3.自定义的(我们自己写的)
4.模块的存在形式:
总共有四种形式,但我们只需要知道两种
1.自己写的单个py文件(一个py文件就是一个模块)
2.包:其实就是一系列模块的结合体,其实就是文件夹
import句式
学习模块的导入必须先搞清楚哪个是执行文件,哪个是导入文件!
import md # import 模块名字(文件名), 一定不要加文件的后缀,只写文件名字即可
其中 md则为导入文件
'''
首次导入文件,会执行导入文件的代码
导入的文件不管导入几次,都只执行一次
'''
导入文件的过程发生了什么事?
1.运行执行文件,产生执行文件的全局名称空间
2.运行md.py文件,会产生md文件的全局名称空间,把md文件里的名字都丢到md的全局名称空间去
3.在执行文件中有一个md的变量,指向导入文件的空间地址
4.后面在执行文件中就可以用md来点出导入文件中的名字
5.导入文件之后,以后再用导入文件中的名字只需要使用点语法的形式点出来就可以
不会与执行文件中的名字发生冲突,因为我们是指名道姓的取值。eg: md.money
# print(md.name) money = 999 # print(money) # print(md.money) # 指名道姓的取值 # def read1(): # print('read1') # md.read1() # read1() md.change() print(money)
from...import...句式
from md import money from md import read1 from md import change """ from...import...句式 首次导入也会执行导入文件 导入多次,也会执行一次 发生了什么事? 1. 运行执行文件,产生执行文件的全局名称空间 2. 运行导入文件md.py, 产生md文件的全局名称空间,然后把md中所有的名字都丢到md的全局名称空间中去 3. 在执行文件中有一个变量money指向导入文件中money的空间地址 4. 我们要想使用导入文件的money,直接用money即可,不再使用md.money了,此时,只是把导入文件的money导入到了执行文件,其他都没有 导入文件之后,就有可能发生执行文件中的名字和导入文件中的名字产生冲突,此时,会使用当前执行文件中的名字 """
导入模块的扩展用法
1.起别名
import testtttttttt as t print(t.name)
from testttttttttttttt import name as n print(n)
2.连续导入
import md import time import os ipmort sys import md, time, os, sys # 连续导入 from md import money from md import read1 from md import read2 from md import money, read1, read2
3.通用导入
# from md import money, read1, read2, change, from md import * # *号接收导入文件md中所有的名字 __all__=['money', 'read1'] # 写在导入文件中,表示在执行文件中只导入money、read1两个名字
判断文件类型
print(__name__,type(__name__))# __main__ <class 'str'> ''' 在执行文件中打印,结果为字符串类型的__main__ '''
import main # main # __name__:如果是在导入文件中打印,结果就是文件名或者叫模块名
print(__name__) # 该文件只想做执行文件,不想被导入使用 def index(): print('from index') if __name__ == '__main__': index()
循环导入
在程序里出现循环导入的问题,说明程序设计不够合理
解决循环导入问题:
1.把导入语句放到代码的最下面
2.函数式
模块的查找顺序(重要)
'''
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.ddd import m3 # 一层一层往下找 print(m3.name)
当导入多个模块时,要以执行文件的所在位置为准
绝对导入和相对导入
绝对导入:
始终以执行文件的位置去查找导入的模块所在位置
相对导入:
可以只参考当前文件所在位置,不用以执行文件所在位置做参考
使用符号:' .',一个点表示当前路径, '.. ',两个点表示上一级的目录。
有相对导入路径的文件都无法当执行文件!
包的使用
包:多个模块的结合体
在python中,包会自动创建一个__init__.py的文件
导包发生的过程:
1.先运行执行文件,并产生执行文件的名称空间
2.然后导包之后,会运行包下面的__init__.py的文件
3.把__init__.py文件产生的名字都放入包的名称空间中
导包其实就是导入包下面的__init__.py文件
通过使用 '' 包的名字.名字 ''从而在执行文件中使用包名称空间中的名字
软件开发目录
注意文件的起名
bin:存放一些启动文件或者入口文件,当启动文件只有一个时,可以将其放在项目的根目录下(run.py 、start.py)
conf:放一些配置文件(setting)
core:将项目的核心逻辑放在这个里面
lib :库里面一般放一些公用的文件(common.py)
log:log.log,日志:记录程序在执行过程中产生的一些记录
db: 将项目中所需要使用的一些数据存放在这里,info.txt
README:对项目的大概流程及一些功能的说明解释
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号