模块

模块

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:对项目的大概流程及一些功能的说明解释

 

posted @ 2023-06-06 17:06  Maverick-Lucky  阅读(158)  评论(0)    收藏  举报