一 模块
模块的定义:
模块其实就是一系列功能的集合体,那么在python中一个.py文件就是一个模块。那么我们要使用一个模块,只需要import.加上被调用名就可以了。
那么为什么要使用模块:
1 从文件级别组合自程序,更方便管理,随着程序的发展,功能越来越多,为了方便管理,我们通常将文件分成一个个的文件,这样做程序的结构更加清晰,
方便管理。这时我们不仅仅可以吧这些文件当作脚本去执行,还可以把他们当成模块导入到其他的模块中,实现了重复利用的功能。
2 拿来主义,提升开发效率:
同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率。
3 模块的使用:
有两种方式:
方式一:直接在执行模块使用import加‘.’后面跟我们需要调用的模块名,来调用模块。
第一次调用模块发生三件事:
1)创建一个模块的名称空间,这个名称空间是与执行模块的名称空间相互独立的。
2)执行模块对应文件,将产生的名字存放于执行模块中的名称空间。
3)当执行文件拿到一个模块名,通过这个名字来调用模块中的功能。
import os
那么每次使用都需要os.来调用模块的功能。
方式二: 我们导入一个模块还可以用from。。。import。。。。的形式,那么from后面我们跟的就是被导入模块的名字,而import后面加的就是要导入的功能。
那么方式二与方式一再前两步是一样的,执行模块中的功能始终以模块的名称空间为准。区别在于在当前名称空间中直接拿到的模块中的名字可以直接使用,而不用再加任何前缀。
那么方式二有一点我们需要注意的就是,我们调用的时候不需要再在调用对象前加上模块名,
但是:就如同我们下面这个例子
调用模块 def func(): print('hello') 执行模块 x=213 def index(): print('dhfh') index() from spam import func # func=index func()
# 这种方法的好处就是你,再调用模块中的功能,不需要制定模块spam.这种模式,而是直接使用名称
# 缺点就是:会与执行模块的同样的名称重复,造成错乱。
那么我们模块方式二还有一些简便的操作:
1) 比如我们想要用到一个模块中的多个功能,但是我们又不能将所有的功能都罗列在from Spam import 。。。。。后面,于是我们想到用(*)来直接调用Spam里面全部的功能。
2) 那么如果我们只是想让他调用一部分的功能,我们可以在被导入模块中定义:__all__['功能1'][‘功能2’],那么就只能但如后面列表中的功能。
4 每个模块都有自己的一个独立的名称空间,在模块中定义的函数,当我们在其他模块调用时不用担心自己模块中全局变量会被导入,不会与调用模块发生冲突。
5 为导入模块起别名:比如我们要导入的模块名比较长,那么我们每次引用就比较麻烦,所以我们在导入时可以为其起别名:
比如:import functional as func:或者import functional from index as ind 那么我们再引用就不用每次写那么长的名字。
6
编写好的一个python文件可以有两种用途:
一:脚本,一个文件就是整个程序,用来被执行
二:模块,文件中存放着一堆功能,用来被导入使用
一个.py文件在当脚本运行与模块导入时的区别:
我们可以使用:
print(__name__)
如果结果为
__main__则被当作脚本执行。
否则:被导入。
1 当文件直接执行时为__main__
2 在文件被当作模块导入时的情况下为:‘模块名’
if __name__=='__main__' print(‘文件被当作脚本执行’) read1()#在文件被当作脚本执行时我们可以对文件进行检测。 else: print(‘文件被导入’)
7 模块搜索路径:
模块的查找顺序是:内存中的模块->内置模块->sys.path路径中包含的模块
其中很重要的一点就是sys.path 的第一个路径为当前执行文件路径。