天天看點

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,如需轉載請自行聯系原作者