一,模块,模块导入

模块
import
from ... import ...
循环导入
相对导入
绝对导入
软件开发目录规范
重点:*********************************************
模块的查找顺序:
1,先从内存中找
2,内置中找
3,sys.path中找(环境变量):
要分清楚谁是执行文件,谁是被导入文件
注意:它里面是一个大列表,里面放了一堆文件路径,第一个路径永远是执行文件。
***************************************************************
一:模块基础知识:
定义:一系列方法或者功能的结合体
模块的三种来源:
1:内置(python解释器自带的)
2:第三方(别人写的)
3:自定义的(自己写的)
模块的四种表现形式:
1, 文件也可以作为模块(一个py文件也可作为一个模块)
2,把一系列的模块组织在一起的文件夹
文件夹下有一个__init__.py文件,包:就是一系列py文件的结合体
3,被编译为共享库或DLL的C或C++扩展(了解)
4.使用C编写并连接到python解释器的内置模块
使用模块的意义:
1,拿来主义,极大的提高开发效率
2,使用自定义模块:重新内容较大时,可以分为不同的模块
便于查找,修改,调用,维护 ,降低成本
如何使用:(注意)
一定要区分那个是执行文件,那个是被导入文件
二:import
1,导入模块:(import.模块名)
import.time
注意:导入多个模块时,import os,time,md (不推荐)
推荐用下面这种:(几个模块没有联系的情况下 应该分多次导入)
import time
import os
import sys
1,通常导入模块的句式会写在文件的开头
2,当模块名字比较复杂的情况下 可以给该模块名取别名
*** 1.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
*** 2.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变
三:from ...import...
from md import money,read,change
from md import money
注意:第二次又导入模块money,或者多次导入时,会沿用第一次导入时创建的名称空间去直接查找结果(沿用第一次的结果)
1,首先会创建执行文件md1.py的名称空间
首次导入md.py文件的模块时
1,运行md.py
2,将产生的名字存放到md.py 名称空间中
3,直接拿到指向模块md.py名称空间中某个值得名字
# 补充
from md1 import * # 一次性将md1模块中的名字全部加载过来 不推荐使用 并且你根本不知道到底有哪些名字可以用
print(money)
print(read)
print(change)
注意:
__all__可以指定当所在py文件被当做模块导入的时候
可以限制导入者能够拿到的名字个数
money = 1000
def read1():
print('md',money)
def read2():
print('md模块')
read1()
def change():
global money
money = 0
__all__ = ['money','read1','read2']
四:循环导入:
1,循环导入在程序实际阶段就应该避免
2,解决循环导入的问题:
1,将循环导入的句式写在文件最下方
2,函数内导入模块
五:绝对导入和相对导入:*******
绝对导入必须依据执行文件所在的文件夹路径为准
1.绝对导入无论在执行文件中还是被导入文件都适用

相对导入
.代表的当前路径
..代表的上一级路径
...代表的是上上一级路径

注意相对导入不能再执行文件中使用*******
相对导入只能在被导入的模块中使用,使用相对导入 就不需要考虑
执行文件到底是谁 只需要知道模块与模块之间路径关系
六:项目目录规范:
1,bin>>start (执行>>>启动文件)
2,conf>> settings (公共>>>配置文件)
3,core>> src (主程序>>功能逻辑文件)
4,lib>> common 公共的资源方法
5, db>> header 数据库 数据资源文件
6,log 日志
补存:
print(__name__)
当文件被当做执行文件执行的时候__name__打印的结果是__main__
当文件被当做模块导入的时候__name__打印的结果是模块名(没有后缀)
def func1():
print('1243243')
def func2():
print('你最帅')
if __name__ == '__main__':
func1()
func2()
原文地址:https://www.cnblogs.com/Fzhiyuan/p/11196462.html