python之基础篇(十)——执行环境与doctest模块

2017-01-10 10:04:32来源:http://itchentao.blog.51cto.com/5168625/1890283作者:忘情OK人点击


防伪码:忘情公子著

解释器环境与选项

python解释器启动:

python[options][-ccmd|filename|-][args]选项描述-3启用将从python3中删除或更改某些功能的警告-B阻止在导入时创建.pyc或.pyo文件-E忽略环境变量-h打印所有可用命令行选项的列表-i在程序执行后进入交互模式-m module以脚本的形式运行库模块module-O优化模式-OO优化模式,在创建.pyo文件时删除文档字符串-Q arg指定python2中除法运算符的行为,值为-Qold(默认值)、-Qnew、-Qwarn或-Qwarnall之一-s阻止将用户站点目录添加到sys.path-S阻止包含site初始化模块-t报告关于不一致的标签使用警告-tt由于不一致的标签使用而导致TabError异常-u未缓冲的二进制stdout和stdin-UUnicode字面量。所有字符串字面量都以Unicode形式处理(仅在python2中使用)-v详细模式。跟踪导入语句-V打印版本号并退出-x跳过源程序的第一行-c cmd以字符串形式执行cmd

python解释器环境变量:

环境变量描述PYTHONPATH以冒号分隔的模块搜索路径PYTHONSTARTUP在以交互方式启动时执行的文件PYTHONHOMEpython安装的位置PYTHONINSPECT相当于-i选项PYTHONUNBUFFERED相当于-u选项PYTHONIOENCODING针对stdin、stdout和stderr的编码和错误处理。这是一个encoding[:errors]形式的字符串,如utf-8或utf-8:ignorePYTHONDONIWRITEBYTECODE相当于-B选项PYTHONOPTIMIZE相当于-O选项PYTHONNOUSERSITE相当于-s选项PYTHONVERBOSE相当于-v选项PYTHONUSERBASE每个用户站点包的根目录PYTHONCASEOK指示为导入所使用的模块名称使用不区分大小写的匹配方式

python代码的测试、调试与探查

基于文档字符串来进行测试。

如果函数、类或模块的第一行是一个字符串,这个字符串就称为文档字符串(docstrings)。

内置函数help()或对象的默认方法__doc__可以显示这些文档字符串。

In[1]:defSum(num1,num2):
...:'''Thesumaryofnum1andnum2.
...:>>>Sum(2,5)
...:7
...:>>>Sum(12,77)
...:89
...:'''
...:returnnum1+num2
...:

In[2]:help(Sum)

In[3]:Sum.__doc__
Out[3]:'Thesumaryofnum1andnum2./n>>>Sum(2,5)/n7/n>>>Sum(12,77)/n89/n'

doctest模块:

doctest模块允许在文档字符串内嵌入注释以显示各种语句的期望行为,尤其是函数和方法的结果

此处的文档字符串看起来如同一个交互式shell会话;

可用于测试文档是否与程序主体保持同步,或基于文档对程序本身做测试

自定义模块mymod:

[root@localhosttest]#pwd
/root/test
[root@localhosttest]#catmymod.py
#!/usr/bin/python

defadd(num1,num2):
'''
>>>add(12,43)
55
'''
returnnum1+num2

在交互式模式下使用doctest模块进行测试:

In[4]:importsys

In[5]:sys.path.append('/root/test')#将/root/test加入模块搜索路径

In[6]:importmymod

In[7]:importdoctest

In[8]:doctest.testmod(mymod)
Out[8]:TestResults(failed=0,attempted=1)

In[9]:doctest.testmod(mymod,verbose=True)
Trying:
add(12,43)
Expecting:
55
ok
1itemshadnotests:
mymod
1itemspassedalltests:
1testsinmymod.add
1testsin2items.
1passedand0failed.
Testpassed.
Out[9]:TestResults(failed=0,attempted=1)

如果文档字符串中的结果与预期结果不一致,测试会显示出错的结果信息。

创建可自测试的模块:

在模块的尾部添加如下代码即可

[root@localhosttest]#catmymod.py
#!/usr/bin/python

defadd(num1,num2):
'''
>>>add(12,43)
55
'''
returnnum1+num2

if__name__=='__main__':
importdoctest
printdoctest.testmod(verbose=True)
[root@localhosttest]#pythonmymod.py
Trying:
add(12,43)
Expecting:
55
ok
1itemshadnotests:
__main__
1itemspassedalltests:
1testsin__main__.add
1testsin2items.
1passedand0failed.
Testpassed.
TestResults(failed=0,attempted=1)

此类模块在python解释器中直接运行时即能进行自我测试。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台