<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 4.8.?全部放在一起 最后一行代碼是唯一還沒有解釋過的,它完成全部的工作。但是現在工作已經簡單了,因為所需要的每件事都已經按照需求建立好了。所有的多米諾骨牌已經就位,到了將它們推倒的時候了。 下面是 `apihelper.py` 的關鍵 ``` print "\n".join(["%s %s" % (method.ljust(spacing), processFunc(str(getattr(object, method).__doc__))) for method in methodList]) ``` 注意這是一條命令,被分隔成了多行,但是并沒有使用續行符 (`\`)。還記得我說過[一些表達式可以分割成多行](../native_data_types/declaring_variables.html#tip.implicitmultiline)而不需要使用反斜線嗎?列表解析就是這些表達式之一,因為整個表達式包括在方括號里。 現在,讓我們從后向前分析。 ``` for method in methodList ``` 告訴我們這是一個[列表解析](../native_data_types/mapping_lists.html "3.6.?映射 list")。如你所知 `methodList` 是 `object` 中[所有你關心的方法](filtering_lists.html#apihelper.filter.care)的一個列表。所以你正在使用 `method` 遍歷列表。 ## 例?4.22.?動態得到 `doc string` ``` >>> import odbchelper >>> object = odbchelper >>> method = 'buildConnectionString' >>> getattr(object, method) <function buildConnectionString at 010D6D74> >>> print getattr(object, method).__doc__ Build a connection string from a dictionary of parameters. Returns string. ``` | | | | --- | --- | | \[1\] | 在 `info` 函數中,`object` 是要得到幫助的對象,作為一個參數傳入。 | | \[2\] | 在你遍歷 `methodList` 時,`method` 是當前方法的名稱。 | | \[3\] | 通過 [`getattr`](getattr.html "4.4.?通過 getattr 獲取對象引用") 函數,你可以得到 _`object`_ 模塊中 _`method`_ 函數的引用。 | | \[4\] | 現在,很容易就可以打印出方法的 `doc string` 。 | 接下來令人困惑的是 `doc string` 周圍 `str` 的使用。你可能記得,`str` 是一個內置函數,它可以[強制將數據轉化為字符串](built_in_functions.html "4.3.?使用 type、str、dir 和其它內置函數")。但是一個 `doc string` 應該總是一個字符串,為什么還要費事地使用 `str` 函數呢?答案就是:不是每個函數都有 `doc string` ,如果沒有,這個 `__doc__` 屬性為 `None`。 ## 例?4.23.?為什么對一個 `doc string` 使用 `str` ? ``` >>> >>> def foo(): print 2 >>> >>> foo() 2 >>> >>> foo.__doc__ >>> foo.__doc__ == None True >>> str(foo.__doc__) 'None' ``` | | | | --- | --- | | \[1\] | 你可以很容易的定義一個沒有 `doc string` 的函數,這種情況下它的 `__doc__` 屬性為 `None`。令人迷惑的是,如果你直接演算 `__doc__` 屬性的值,Python IDE 什么都不會打印。這是有意義的 (前提是你考慮了這個結果的來由),但是卻沒有什么用。 | | \[2\] | 你可以直接通過 `__doc__` 屬性和 `None` 的比較驗證 `__doc__` 屬性的值。 | | \[3\] | `str` 函數可以接收值為 null 的參數,然后返回它的字符串表示,`'None'`。 | > 注意 > 在 SQL 中,你必須使用 `IS NULL` 代替 `= NULL` 進行 null 值比較。在 Python,你可以使用 `== None` 或者 `is None` 進行比較,但是 `is None` 更快。 現在你確保有了一個字符串,可以把這個字符串傳給 `processFunc`,這個函數[已經定義](lambda_functions.html "4.7.?使用 lambda 函數")是一個既可以壓縮空白也可以不壓縮空白的函數。現在你看出來為什么使用 `str` 將 `None` 轉化為一個字符串很重要了。`processFunc` 假設接收到一個字符串參數然后調用 `split` 方法,如果你傳入 `None` ,將導致程序崩潰,因為 `None` 沒有 `split` 方法。 再往回走一步,你再一次使用了字符串格式化來連接 `processFunc` 的返回值 和 `method` 的 `ljust` 方法的返回值。`ljust` 是一個你之前沒有見過的新字符串方法。 ## 例?4.24.?`ljust` 方法介紹 ``` >>> s = 'buildConnectionString' >>> s.ljust(30) 'buildConnectionString ' >>> s.ljust(20) 'buildConnectionString' ``` | | | | --- | --- | | \[1\] | `ljust` 用空格填充字符串以符合指定的長度。`info` 函數使用它生成了兩列輸出并將所有在第二列的 `doc string` 縱向對齊。 | | \[2\] | 如果指定的長度小于字符串的長度,`ljust` 將簡單地返回未變化的字符串。它決不會截斷字符串。 | 幾乎已經完成了。有了 `ljust` 方法填充過的方法名稱和來自調用 `processFunc` 方法得到的 `doc string` (可能壓縮過),你就可以將兩者連接起來并得到單個字符串。因為對 `methodList` 進行了映射,最終你將獲得一個字符串列表。利用 `"\n"` 的 `join` 函數,將這個列表連接為單個字符串,列表中每個元素獨占一行,接著打印出結果。 ## 例?4.25.?打印列表 ``` >>> li = ['a', 'b', 'c'] >>> print "\n".join(li) a b c ``` | | | | --- | --- | | \[1\] | 在你處理列表時,這確實是一個有用的調試技巧。在 Python 中,你會十分頻繁地操作列表。 | 上述就是最后一個令人困惑的地方了。但是現在你應該已經理解這段代碼了。 ``` print "\n".join(["%s %s" % (method.ljust(spacing), processFunc(str(getattr(object, method).__doc__))) for method in methodList]) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看