Python模块的编写和调用


之前根据具体的应用情景写过一些关于Python模块的文章
Python中的模块与包
Python中第三方模块的安装
Python中如何解决ImportError:No Module Named arcpy问题

今天需要讨论一下Python模块内容如何编写的问题。

模块

Python将代码拆分为模块最初的目的是功能的独立,所以说模块提供的是某个独立的功能。作为函数式编程语言,Python模块的内容一般写为函数的形式。

#!/user/bin/env python3
# -*- coding:utf-8 -*-

'doc of a test module'

__author__ = 'XuZhiyuan'

from functools import reduce

def add(*args):
    return reduce(_add_two,args)
def _add_two(x,y):
    return x + y

def minus(x,y):
    return x - y

def multi(*args):
    return reduce(_multi_two, args)
def _multi_two(x,y):
    return x * y

def divide(x,y):
    if y == 0:
        return None
    return x / y

if __name__ == '__main__':
    print(add(*range(100)))
    print(minus(10,5))
    print(multi(*range(1,10)))
    print(divide(10,0))
    print(divide(10,5))
    print(__name__)

譬如上面是一个实现基本四则运算的模块。

第1、2行是标准注释,第1行的注释#!/user/bin/env python3使得这个模块可以直接在Unix/Linux/Mac上运行,第2行注释# -*- coding:utf-8 -*-表示文件使用标准的utf-8编码。

第4行是模块的文档注释,任何模块代码的第一个字符串都被当作是模块的文档注释。

第6行使用模块的__author__变量写入模块的作者。

以上就是Python模块的标准文件模板,当然这些也可以不写,但还是建议按照标准格式构建模块。

接下来是模块的主要内容。首先需要import模块使用到的标准库,然后是一系列函数实现模块的方法。

最后一部分代码if __name__ == '__main__'需要特别注意,这是什么意思呢?
Python模块有很多属性和方法:

>>> dir(module)
['__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_add_two', '_multi_two', 'add', 'divide', 'math', 'minus', 'multi', 'reduce']

Python模块也是.py文件,也是可以被直接运行的,当模块被直接运行时,模块的__name__属性值为__main__,所以可以在直接运行时写入一些调试语句;当模块被import载入使用时,__name__属性为模块的名称,所以就会自动忽略那些调试语句。

模块直接运行的结果如下:

D:\>python module.py
4950
5
362880
None
2.0
__main__

而被import导入的使用方法如下:

>>> import module
>>> module
<module 'module' from 'D:\\module.py'>
>>> module.add(*range(100))
4950

什么?不知道自己写完模块怎么导入调用?看这里!

什么?这么多功能写到一个模块里面?当然,完全可以把它们写成Python包的形式。详见下一篇文章:Python包编写详解

(By XuZhiyuan 2016-06-18 10点 @Hohai Sunny)

转载自:https://blog.csdn.net/destinyuan/article/details/51698789

You may also like...