第一类:内置模块,也叫做标准库。此类模块就是python解释器给你提供的,比如我们之前见过的 time模块,os模块。标准库的模块非常多(200多个,每个模块又有很多功能),我们这几天 就讲常用的十几种,后面课程中还会陆续的讲到。
第二类:第三方模块,第三方库。一些python大神写的非常好用的模块,必须通过pip install 指令安 装的模块,比如BeautfulSoup, Django,等等。大概有6000多个。
第三类:自定义模块。我们自己在项目中定义的一些模块。
什么是模块?
什么是自定义模块?
模块的运行方式:
python为我们内置了全局变量__name__
print(‘from the tbjx.py‘)
__all__ = [‘name‘, ‘read1‘,]
name = ‘太白金星‘
def read1():
def read2():
print(‘tbjx模块‘)
read1()
def change():
global name
name = ‘barry‘
#添加了这个判断的的调用,说明是在测试阶段,那么调用本模块的时候,下面的read1()不会执行的
if __name__ == ‘__main__‘:
# 在模块文件中测试read1()函数
# 此模块被导入时 __name__ == tbjx 所以不执行
read1()
#在初始化后,python程序可以修改sys.path,路径放到前面的优先于标准库被加载。
import sys
sys.path.append(‘/a/b/c/d‘)
sys.path.insert(0,‘/x/y/z‘) #排在前的目录,优先被搜索
注意:搜索时按照sys.path中从左到右的顺序查找,位于前的优先被查找,sys.path中还可能包含.zip归档文件和.egg文件,python会把.zip归档文件当成一个目录去处理,
#首先制作归档文件:zip module.zip foo.py bar.py
import sys
sys.path.append(‘module.zip‘)
import foo,bar
#也可以使用zip中目录结构的具体位置
sys.path.append(‘module.zip/lib/python‘)
#windows下的路径不加r开头,会语法错误
sys.path.insert(0,r‘C:\Users\Administrator\PycharmProjects\a‘)
#至于.egg文件是由setuptools创建的包,这是按照第三方python库和扩展时使用的一种常见格式,.egg文件实际上只是添加了额外元数据(如版本号,依赖项等)的.zip文件。
#需要强调的一点是:只能从.zip文件中导入.py,.pyc等文件。使用C编写的共享库和扩展块无法直接从.zip文件中加载(此时setuptools等打包系统有时能提供一种规避方法),且从.zip中加载文件不会创建.pyc或者.pyo文件,因此一定要事先创建他们,来避免加载模块是性能下降。
接下来我们就开始讲解python常用的内置模块,由于Python常用的模块非常多,我们不可能将所有的模块都讲完, 所以只针对于工作中经常用到模块进行讲解。剩下的模块可以在课余时间自学。
import sys
#过去当前文件的绝对路径
print(__file__)
#使用os模块获取当前文件的父路径
import os
print(os.path.dirname(__file__)+‘/A‘)
#使用os、sys模块获取当前文件夹的相对路径
import sys
import os
sys.path.append(os.path.dirname(__file__) + ‘/aa‘)
import 模块名
import os,sys,json # 这样写可以但是不推荐
#推荐写法
#多行导入:易于阅读 易于编辑 易于搜索 易于维护。
import os
import sys
import json
一行导入一个:
from ... import ... 的使用示例。
from tbjx import name, read1
print(name)
read1()
‘‘‘
执行结果:
from the tbjx.py
太白金星
tbjx模块: 太白金星
‘‘‘
一行导入多个:
from tbjx import read1,read2,name
? 大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。
可以使用all来控制*(用来发布新版本),在tbjx.py中新增一行
#这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字
__all__=[‘money‘,‘read1‘]
? 模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码
? 在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,可以将共享的数据集中存放到某一个地方在程序出现了循环/嵌套导入后的异常分析、解决方法如下(了解,以后尽量避免)
好处
import tbjx as t
t.read1()
#mysql.py
def sqlparse():
print(‘from mysql sqlparse‘)
#oracle.py
def sqlparse():
print(‘from oracle sqlparse‘)
#test.py
db_type=input(‘>>: ‘)
if db_type == ‘mysql‘:
import mysql as db
elif db_type == ‘oracle‘:
import oracle as db
db.sqlparse()
原文:https://www.cnblogs.com/hsyw/p/13624524.html