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
3import com.innerac.hello
#调用函数的方法
com.innerac.hello.helloworld()
也可以通过from xxx import xxx
1
2
3from com.innerac import hello
#调用
hello.helloworld()
也可以直接导入函数1
2
3from 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__
“不写或者为空的话,将不会导入任何模块。