天天看点

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

解释器环境与选项

  python解释器启动:

<code>python [options] [</code><code>-</code><code>c cmd | filename | </code><code>-</code> <code>] [args]</code>

选项

描述

-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

-U

Unicode字面量。所有字符串字面量都以Unicode形式处理(仅在python2中使用)

-v

详细模式。跟踪导入语句

-V

打印版本号并退出

-x

跳过源程序的第一行

-c cmd

以字符串形式执行cmd

  python解释器环境变量:

环境变量

PYTHONPATH

以冒号分隔的模块搜索路径

PYTHONSTARTUP

在以交互方式启动时执行的文件

PYTHONHOME

python安装的位置

PYTHONINSPECT

相当于-i选项

PYTHONUNBUFFERED

相当于-u选项

PYTHONIOENCODING

针对stdin、stdout和stderr的编码和错误处理。这是一个encoding[:errors]形式的字符串,如utf-8或utf-8:ignore

PYTHONDONIWRITEBYTECODE

相当于-B选项

PYTHONOPTIMIZE

相当于-O选项

PYTHONNOUSERSITE

相当于-s选项

PYTHONVERBOSE

相当于-v选项

PYTHONUSERBASE

每个用户站点包的根目录

PYTHONCASEOK

指示为导入所使用的模块名称使用不区分大小写的匹配方式

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

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

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

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

<code>In [</code><code>1</code><code>]: </code><code>def</code> <code>Sum</code><code>(num1,num2):</code>

<code>   </code><code>...:     </code><code>'''The sumary of num1 and num2.</code>

<code>   </code><code>...:     &gt;&gt;&gt; Sum(2,5)</code>

<code>   </code><code>...:     7</code>

<code>   </code><code>...:     &gt;&gt;&gt; Sum(12,77)</code>

<code>   </code><code>...:     89</code>

<code>   </code><code>...:     '''</code>

<code>   </code><code>...:     </code><code>return</code> <code>num1 </code><code>+</code> <code>num2</code>

<code>   </code><code>...:</code>

<code>In [</code><code>2</code><code>]: </code><code>help</code><code>(</code><code>Sum</code><code>)</code>

<code>In [</code><code>3</code><code>]: </code><code>Sum</code><code>.__doc__</code>

<code>Out[</code><code>3</code><code>]: </code><code>'The sumary of num1 and num2.\n    &gt;&gt;&gt; Sum(2,5)\n    7\n    &gt;&gt;&gt; Sum(12,77)\n    89\n    '</code>

  doctest模块:

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

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

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

    自定义模块mymod:

<code>[root@localhost test]</code><code># pwd</code>

<code>/</code><code>root</code><code>/</code><code>test</code>

<code>[root@localhost test]</code><code># cat mymod.py</code>

<code>#!/usr/bin/python</code>

<code>def</code> <code>add(num1,num2):</code>

<code>    </code><code>'''</code>

<code>    </code><code>&gt;&gt;&gt; add(12,43)</code>

<code>    </code><code>55</code>

<code>    </code><code>return</code> <code>num1 </code><code>+</code> <code>num2</code>

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

<code>In [</code><code>4</code><code>]: </code><code>import</code> <code>sys</code>

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

<code>In [</code><code>6</code><code>]: </code><code>import</code> <code>mymod</code>

<code>In [</code><code>7</code><code>]: </code><code>import</code> <code>doctest</code>

<code>In [</code><code>8</code><code>]: doctest.testmod(mymod)</code>

<code>Out[</code><code>8</code><code>]: TestResults(failed</code><code>=</code><code>0</code><code>, attempted</code><code>=</code><code>1</code><code>)</code>

<code>In [</code><code>9</code><code>]: doctest.testmod(mymod,verbose</code><code>=</code><code>True</code><code>)</code>

<code>Trying:</code>

<code>    </code><code>add(</code><code>12</code><code>,</code><code>43</code><code>)</code>

<code>Expecting:</code>

<code>ok</code>

<code>1</code> <code>items had no tests:</code>

<code>    </code><code>mymod</code>

<code>1</code> <code>items passed </code><code>all</code> <code>tests:</code>

<code>   </code><code>1</code> <code>tests </code><code>in</code> <code>mymod.add</code>

<code>1</code> <code>tests </code><code>in</code> <code>2</code> <code>items.</code>

<code>1</code> <code>passed </code><code>and</code> <code>0</code> <code>failed.</code>

<code>Test passed.</code>

<code>Out[</code><code>9</code><code>]: TestResults(failed</code><code>=</code><code>0</code><code>, attempted</code><code>=</code><code>1</code><code>)</code>

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

  创建可自测试的模块:

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

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>import</code> <code>doctest</code>

<code>    </code><code>print</code> <code>doctest.testmod(verbose</code><code>=</code><code>True</code><code>)</code>

<code>[root@localhost test]</code><code># python mymod.py</code>

<code>    </code><code>__main__</code>

<code>   </code><code>1</code> <code>tests </code><code>in</code> <code>__main__.add</code>

<code>TestResults(failed</code><code>=</code><code>0</code><code>, attempted</code><code>=</code><code>1</code><code>)</code>

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

本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1890283,如需转载请自行联系原作者