模快

模块:
模块是什么?
模块就是一些列功能的结合体(一个模快里面可以有多个功能)
模快是怎么产生的?
1.python内置的模快,也就是已经写好了的
2.就是别人写的(第三方的)
3.自定义的,也就是自己写的模快
模快的四种表现方式:
1.使用python编写的py文件(也就是说py文件可以是一个模快
一个py文件也可以称之为以个模快)
2.已经被编译为共享的库或者DLL的c或者c++扩展
3.把一些列模快组织到一起的文件夹(文件夹先有一个__iner__.py文件,改文件称之为包)
包: 一系列py文件的结合体
4.使用c编写并连接到python解释器的内置模快

说了这么多,那模快有什么用呀?
1.别人写的模快(内置的,第三方的),拿来就用,极大地提高了工作的效率
2.使用自己写的:当项目程序比较庞大的时候,不可能所有代码都在一个py文件中全部编写
那么当多个文件中都需要使用相同的功能方法的时候,可以将公共的方法写到一个py文件
件中,这样就不必重复的编写相同代码,避免代码的冗余,直接以模快的形式直接调用.

使用模快需要注意的是:一定要分清哪个是执行文件,哪个是被执行文件(也就是被导入文件)

使用模块 import from...import
import:
模快可以包含可执行的语句和函数的定义,这些代码的目的是初始化模块,他们只在模快名第一次遇到
导入import 关键字是才执行;import关键字可以在程序的任意位置是使用,并且可以针对同一个模快
import多次:为了防止重复导入在第一次导入后就已经将模快加入到内存了,后续的import仅仅是对已
经加载到内存中的对象增加一次引用,并不会重复执行模快中的语句
示例:
import mngd
import mngd
import mngd
import mngd
执行结果:
'''
hello
娘希匹
Process finished with exit code 0
'''
第一次导入模块时会引发三件事情:
1.为被调用文件(模快)创建一个新的名称空间.
2.在新创的空间中执行模块中的代码
3.以模块的名字来命名新的空间名称
这个名称和变量的名称没有什么区别,都可以调用;访问模块空间中的名字统一的
标准就是模块名字.要访问的名字
1.指名道姓的访问模块中的名字永远不会与执行空间中的名字起冲突.
示例:
import mngd
print(mngd.name) # 访问模块空间中的名字的唯一方法就是莫快明.名字

运行结果为:
'''
美猴王
'''
from 模块空间名称 import .模块中的洺郗..模块导入
from...import和import的对比
唯一的区别就是使用from...import..是直接将模块中的名字直接导入到当前空间,所在当前
空间中使用比较方便,不需要加空间名的前缀了
那么有好处相对也就有坏处:
好处就是使用起来比较方便
坏处就是容易和当前空间中的变量名字起冲突,所以正常情况下我们是不会用这种方式直接导入的
因为我们也不知道导入的都是什么名字,会不会直接覆盖了原来已经定好的名字

.循环导入的问题:
模快循环/嵌套导入和抛出异常的根本原因是由于在PYthon 模块被导入一次后,就不会再重新导入,只会
在第一次导入时执行模块内的代码
我们在项目中应该尽量避免出现循环和嵌套导入,如果出现多个模快都需要共享的数据,我们可以将共享的数据
存在一个固定的地方

区分py文件的两种方式:
def index1():
print('indxe1')

def index2():
print('index2')
print(__name__) # 当文件被当成执行文件的时候__name__打印的结果是__nain__
# 当前文件被当做模块被导入的时候__name__打印的结果是模块名(没有后缀)

if __name__ == '__main__': # 快捷写法,写个mian直接敲个tab键
index1()
index2()
# 当文件被当成执行文件的时候__name__打印的结果是__nain__
# 当前文件被当做模块被导入的时候__name__打印的结果是模块名(没有后缀)


模块的查顺序:
先从内存中找---->内置中找---->sys.path中找(环境变量)
注意:一定要知道那个是执行文件那个是被导入文件

sys.path 是一个大列表,里面放了一堆的文件路径,第一个永远都是执行文件所在的文件路径
如果需要载入的模块不在内存中不在内置中,在sys.path中但是不在一个文件路径下
使用import是找不到的,这个时候就需要使用form 文件名 import 模块名字这样就可以找得到了
from 可以是文件也可以是文件夹 import 文件名和文件夹

对导入和相对导入:

绝对导入必须依据执行文件所在的文件路径为准
1.绝对导入无论在执行文中还是在被执行文件中都适用

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

相对导入不可以在执行文件中适用,可以在调用文件中使用.用相对导入就可以不用考虑执行文件的路径
只需知道模块与模快之间的相对路径,在模块中使用后该模块就不可以当做执行文件了


软件开发目录规范
1. 项目的启动文件通常放在两个地方
1.放在bin文件夹
2.或者放置在文件的根文件夹
2.配置文件conf 配置文件里面都是不经常改变的参数变量
IP = '172.168.100.1'
PORT
DATABASE

3.lib 放置公共的功能

4.core放置核心逻辑

5.db 数据库

6.log 日志
系统日志
7.readme 文本
对软件的阐述

原文地址:https://www.cnblogs.com/ioipchina/p/11198479.html