初学python(九)模块

python的模块就是在其他的python程序中调用写好的python文件。额,好乱的样子,就是使用已经封装好的python类和函数。我自己是这么理解的。
这里先说怎样导入其他模块、怎样区别是自己调用还是其他程序调用、和创建一个包。
关于导入父级包后同时导入其他子包,本人查阅了数多资料还是没找到解决方法。等以后知道了再来补充。

__name__ 的使用方法

每个.py都有一个__name__变量,如果调用该.py的程序是它自己,那么__name的值为’__main‘。这样就可以写一个函数如下:

#hello.py
#author innerac
def helloworld():
    if __name__ == '__main__':
        print('Hello World!')
    else:
        print('Hello the other World!!!')

如果是本程序调用则会输出’Hello World!‘,如果是其他程序调用的话就会输出’Hello the other World!!!

导入模块

这里仅仅学习简单的导入模块。首先我们有如下结构的包(包是已经建好的)

com/
    __init__.py
    innerac/
        __init__.py
        hello.py

我们在程序中通过import导入

1
2
3
import com.innerac.hello
#调用函数的方法
com.innerac.hello.helloworld()

也可以通过from xxx import xxx

1
2
3
from com.innerac import hello
#调用
hello.helloworld()

也可以直接导入函数

1
2
3
from com.innerac.hello import helloworld
#调用
helloworld()

以上3个*.py都是和com是同目录的。他们的输出均为’Hello the other World!!!

创建一个包

如何创建一个包,首先应该在被当做包的目录下新建一个空的’__init__.py‘文件。该文件声明了这是一个包结构。如上图我们的结构。
起始只要有了空的文件我们就可以完成了我们所需要的功能。可是咱有强迫症,想导入父目录就同时把子目录也导入了。这个查阅了许多资料均没有找到想要的结果,后来只能自己写了个import这个方法仅供参考,欢迎指正。
我想要的功能就是在与com同级的python文件下只写一句”import com“就可以直接使用”hello.py“下的函数。为此,我在”com/__init__.py“下加入语句:

#com/
#author innerac
import com.innerac
__all__ = []

在”com/innerac/__init__.py“下加入语句:

#com/
#author innerac
import com.innerac.hello
__all__ = ["hello"]

然后就可以直接调用了:

#start.py
#author innerac
import com
#直接调用
com.innerac.hello.helloworld()

输出结果”Hello the other World!!!

还有一种导入方式就是’*‘,如上图的包结构,只要我在”__init__.py“中创建一个”__all__“的list,然后将需要导入的模块都放进去。如”com/innerac/__init__.py“里的代码。只要在程序中书写:

#start.py
#author innerac
from com.innerac import *
#全部导入
hello.helloworld()

就可以得到想要的结果了。
如果”__all__“不写或者为空的话,将不会导入任何模块。