您的位置:首页 > 编程语言 > Python开发

Python模块的编写和调用

2016-06-18 10:17 495 查看
之前根据具体的应用情景写过一些关于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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息