第十章 模块和包管理

使用函数,可以把一个功能的代码抽取出来,提供给工程调用,在第九章中,函数和调用的程序是在同一个文件中,这样在工程中互相配合还是比较麻烦的,在工程中每个开发人员分配不同的事情,分配不一样的功能,这在项目中是经常容易碰到的,而不同的开发人员能够开发独立的功能,把独立的功能放在独立的文件中,这就形成了不同功能不同的模块。这就是模块的一种用法。进一步提高了工程的复用率,减低了工程的复杂度。

用模块化的思想,再对上一章的代码进行改造,

在项目中建立一个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)

整个项目的文件结构如下:


所有评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。

还没有评论

撰写评论