python模块和包

模块就是程序,任何python程序都可以作为模块进行导入。模块用于定义函数和类等。当导入模块后,会有一个__pycache__子目录,这个缓存文件目录包含处理后的文件,能更高效的处理,以后再次导入则使用它。

python包含一组称为标准库的模块,默认在/usr/local/lib/python3.6目录下(我的python版本是3.6,不同版本位置可能不同)都可以看到,也可以通过导入模块,然后使用__file__方法来查看模块的路径:

模块导入方法

python中的模块使用命令import来导入。格式:模块.函数。也可以使用另外一种形式:from 模块 import 函数。

在这里我自定义一个模块hello.py:
#cat hello.py
def test1(): print("hello-------one") def test2(): print("hello-------two") test1() test2() 然后创建另一个m.py文件来调用这个模块: #cat m.py
#模块导入方式一 import hello hello.test1() hello.test2() #模块导入方式二 from hello import test1,test2 test1() test2() #模块导入方式三 from hello import * test1() test2()

尽管可以使用不同的方法来调用模块,但是发现一个问题,就是被调用模块中的函数重复运行了。为了避免这个情况,关键是检查模块是作为程序运行还是被导入另一个程序的,为此需要变量__name__。在主程序中,变量__name__的值为'__main__',而在导入的模块中,这个变量值被设置为该模块的名称,所以可以在模块中加入一个if语句,if __name__ == '__main__'。

# cat hello.py

#!/usr/bin/evn python3

def test1():
print("hello-------one")
def test2(): print("hello-------two") if __name__ == '__main__': test1() test2()

此时再次运行可以发现不会重复出现了:

包也是一种模块,可以包含其他模块,包是一个目录。要被python视为包,目录中必须包含__init__.py文件,包的导入会首先执行__init__.py。其他模块加入包中,放入包的目录即可。这里python默认包的路径为:

/usr/local/lib/python3.6/site-packages。

包的创建使用

创建一个pak目录,并分别创建__init__.py、test1.py和test2.py三个文件:

# cat test1.py
def test1():
print("test1-----")

# cat test2.py
def test2():
print("test2-----")

# cat __init__.py
__all__ = ["test1","test2"]
from . import *

1)包要想能够使用,__init__.py文件得添加一句from . import *,意思是从当前包的目录导入所有模块文件,因为包的导入会首先执行__init__.py。

2)变量__all__包含一个列表,起到过滤变量、函数和类的作用。因为模块中可能包含大量的不需要的变量、函数和类,设置__all__,则会在以import *方式导入时,导入所有不以下划线打头的全局名称。

当把变量__all__改为了__all__= ["test1"],可以看到test2模块导入不了:

也可以通过调用变量__all__来查看可以调用的模块。包的导入方式和模块一样也可以通过from 包 import 模块。

使用help可以查看帮助

使用__doc__查看模块信息

使用file查看模块源码位置

一些常用的模块:sys、os、fileinput、集合,堆和双端队列、time、random、shelve,json、re等等。

原文地址:https://www.cnblogs.com/whych/p/9683957.html