Python3 模块

不要怕麻烦,一点点的咬破它

Posted by WEW on April 28, 2019

模块(import)

python的模块类似于C++的库(头文件),通常也是用来存放一些编辑好的函数或者变量,在引入这些模块之后,模块中的函数和变量我们就可以直接引用

import语句

通常要使用源文件只需要在另一个源文件中进行引入该模块就OK

import module1[, module2[,... moduleN]

当解释器遇到improt语句,如果被import的模块在当前路径中,则该模块就会被导入,这里搜索路径指的是一个解释器会首先搜索所有目录的列表

imp.py内容如下:
def func1():
    print("hello func1 from imp!")
    return
    
import_imp.py内容如下:
from imp import func1
func1()

输出结果:
hello func1 from imp!

from 模块名 import 函数

该语句用于导入模块中的若干函数

from 模块名 import *

用于导入模块中的所有函数

__name__属性

每个模块都有一个__name__属性,该属性只在模块自身运行时执行,我们可以将部分函数封装在__name__属性中,这样别的模块无法通过引用而执行

using_name.py内容如下
if __name__=='__main__':
    print("程序自身在运行")
else:
    print("其他模块调用")
    
执行:python using_name.py
输出:程序自身在运行
执行:python
     import using_name
输出:其他模块调用

dir()函数

该函数可以输出模块内的定义的所有名称,以一个列表的形式返回,当我们对摸个模块不清楚时,可以使用该函数进行查找

包是包含了多个模块的模块,我们在引入包的时候需要用到点.进行操作,譬如

sound/
    __init__.py
    sub1/
        __init__.py
        hello1.py
    sub2/
        __init__.py
        hello2.py
的多级目录

引用的时候可以这样引用:
from sound.sub1.hello1 import sound_sub1_hello as ssh
其中sound_sub1_hello是hello1中的函数,这里需要注意的是,from后跟的是文件夹或者文件,import要么是单纯文件,要么是文件中的具体函数,不能是半文件半函数

从一个包里导入*

如果执行这个命令,那么python会从文件系统中找到这个包的所有的子模块,一一进行导入,但是有时候我们没必要全部导入,此时,我们可以在__init__.py中添加__call__属性,并将需要导入的包引入进来,操作如下:

__all__ = ["echo", "surround", "reverse"]

那么我们在导入*的时候就会只导入这三个子模块