14、模块、调用、循环导入的问题、模块的搜索路径与优先级、开发规范

一、模块

1、什么是模块

​ 模块就是一系列功能的集合体

​ 模块大致分为四种类别:

1、一个py文件就是一个模块,文件名叫test.py,模块名叫test

2、一个包含有__int__.py文件的文件夹称之为包,包也是模块

3、使用c编写并链接到python解释器的内置模块

4、已被编译为共享库或者DLL的C或者C++的拓展

​ 模块有三种来源:

​ 1、自带的模块

​ 2、第三方模块:pip3 install requests

​ 3、自定义模块

2、为何要用模块

​ 1、(自定义模块、第三方模块)拿来主义,为了提高开发效率

​ 2、自定义模块是为了解决代码冗余问题

3、如何用模块

​ 模块都是用来被导入使用的,不是用来运行的

​ 首次导入模块发生的3件事情

1、执行py文件

2、产生py文件的名称空间,将py文件运行过程中产生的名字丢到该文件的名称空间中

3、在当前文件中产生一个名字,该名字指向2中产生的而名称空间

​ 之后的导入,都是直接引用首次导入产生的名称空间,不会重复执行代码

二、模块的import引用

​ 强调用:模块名.名字,指名道姓的问某一个模块要名字对应的值,不会与当前名称空间的名字发生冲突

​ 强调2:无论是查看还是修改,都是以原模块为基准的,与调用位置无关

拓展:
可以以逗号为分隔符,在一行导入多个模块。
建议还是分开写如下
import time
import foo
import m


import time,foo,m		#不建议
导入模块的规范
I、python内置模块
II、第三方模块
III、程序员自定义模块

例:
import time
import sys

import 第三方1
import 第三方2

import 自定义模块1
import 自定义模块2
import 自定义模块3
import...as...

如果文件名过长,可以起别名
import foooooooooooooo as f #f=fooooooooooooo
f.get()

5、模块是第一类对象

6、自定义模块的命名应该采用纯小写加下划线的风格

7、可以在函数内导入模块去使用

def func():
	import foo

三、一个py文件有两种用途

1、被当成程序运行

2、被当作模块导入

二者的区别:

1、当文件被运行时,__name__的值为__main__
2、当文件被当作模块导入时,__name__的值为**

打main+回车

四、from+import

用import导入模块优缺点:

优点:肯定不会与当前名称空间中的名字冲突

缺点:加前缀显得麻烦

from...import...导入也发生了三件事

1、产生一个模块的名称空间

2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间去

3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址

from foo  import  x
from foo  import  get
from foo  import  change

优点:不用加前缀,代码更精简

缺点:容易与当前名称空间混淆

拓展
一行导入多个名字(不推荐)
from foo import x, get, change

用*导入所有的名字(极其不推荐)
from foo import *

香是挺香的,但是非常容易发生冲突

五、循环导入的问题

尽量不要出现循环导入,把两个功能放到第三方去。

如果发生了循环导入,解决方法如下:

def f():   #定义一个函数来导入,定义阶段不会执行,
					放在开头增加可读性
	from m2 import y
	print(y)

六、模块的搜索路径与优先级

1、内存中已经导入好的

2、内置的

3、sys.path #这是一个列表,记录的元素都是文件夹。临时加。

import sys
sys.path.append(r'D:python17day02')

七、开发规范
https://www.jianshu.com/p/94f88ce945a2

原文地址:https://www.cnblogs.com/zhaokunhao/p/14231255.html