使用函数,可以把一个功能的代码抽取出来,提供给工程调用,在第九章中,函数和调用的程序是在同一个文件中,这样在工程中互相配合还是比较麻烦的,在工程中每个开发人员分配不同的事情,分配不一样的功能,这在项目中是经常容易碰到的,而不同的开发人员能够开发独立的功能,把独立的功能放在独立的文件中,这就形成了不同功能不同的模块。这就是模块的一种用法。进一步提高了工程的复用率,减低了工程的复杂度。
用模块化的思想,再对上一章的代码进行改造,
在项目中建立一个module_yyp
的文件夹,先在文件夹中建立一个__init__.py
的文件,__init__.py
文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py
文件。
在module_yyp的文件夹下,建立自己的模块,也就是我们想把阶乘独立的当成一个数学模块,建立math_yyp.py
文件,文件如下
#!/usr/bin/python
#coding=utf-8
"""
start python 项目
"""
__author__ = 'yyp'
def factorial(x):
result = 1
for i in xrange(2, x + 1):
result *= i
return result
在主文件中,先把模块引用进来,再进行模块的调用。
#!/usr/bin/python
#coding=utf-8
"""
start python 项目
"""
__author__ = 'yyp'
from module_yyp import math_yyp
if __name__ == '__main__':
print math_yyp.factorial(5)
#打印出120
用上面的方式,创建自己的模块,其实python中的模块也是这样的原则,在下面更多的章节中,会学习到python相应的模块,你会发现规则就是如此。在编写python代码时,一个是对python语言特性固有的了解,一个是对模板库的熟悉。这些都是需要大量的练习和经验,但是如何系统的看待python也是非常重要的。
在这里可以对一个用法进行解释了,就是在程序中一直使用的if __name__ == '__main__'
,这一段代码是什么意思,是不是像c/c++语言中,每个程序都有一个main()函数也就是入口函数,python中还是有一定区别的,可以说在python中并没有main函数,程序在执行的时候,都是从文件头开始执行到文件结束的,但像这一小节中,文件还有一种是被引用进来的,这里就是通过 __name__
来判断,文件是被执行还是被调用的,如果是被调用的 __name__
的值就不会是main。而在被调用的文件中是用if __name__ == '__main__'
,通常可以用来对模块进行相应的测试和调试,而这段代码在被调用时是不会被执行的。
如下可以把math_yyp.py 文件修改为:
#!/usr/bin/python
#coding=utf-8
"""
start python 项目
"""
__author__ = 'yyp'
def factorial(x):
result = 1
for i in xrange(2, x + 1):
result *= i
return result
# 在被调用的时候,是不会被执行的
if __name__ == '__main__':
print factorial(5)
整个项目的文件结构如下: