<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 目標Python2+3 # 22. 目標Python2+3 很多時候你可能希望你開發的程序能夠同時兼容Python2+和Python3+。 試想你有一個非常出名的Python模塊被很多開發者使用著,但并不是所有人都只使用Python2或者Python3。這時候你有兩個辦法。第一個辦法是開發兩個模塊,針對Python2一個,針對Python3一個。還有一個辦法就是調整你現在的代碼使其同時兼容Python2和Python3。 本節中,我將介紹一些技巧,讓你的腳本同時兼容Python2和Python3。 **Future模塊導入** 第一種也是最重要的方法,就是導入`__future__`模塊。它可以幫你在Python2中導入Python3的功能。這有一組例子: 上下文管理器是Python2.6+引入的新特性,如果你想在Python2.5中使用它可以這樣做: ~~~ from __future__ import with_statement ~~~ 在Python3中`print`已經變為一個函數。如果你想在Python2中使用它可以通過`__future__`導入: ~~~ print # Output: from __future__ import print_function print(print) # Output: <built-in function print> ~~~ **模塊重命名** 首先,告訴我你是如何在你的腳本中導入模塊的。大多時候我們會這樣做: ~~~ import foo # or from foo import bar ~~~ 你知道么,其實你也可以這樣做: ~~~ import foo as foo ~~~ 這樣做可以起到和上面代碼同樣的功能,但最重要的是它能讓你的腳本同時兼容Python2和Python3。現在我們來看下面的代碼: ~~~ try: import urllib.request as urllib_request # for Python 3 except ImportError: import urllib2 as urllib_request # for Python 2 ~~~ 讓我來稍微解釋一下上面的代碼。 我們將模塊導入代碼包裝在`try/except`語句中。我們是這樣做是因為在Python 2中并沒有`urllib.request`模塊。這將引起一個`ImportError`異常。而在Python2中`urllib.request`的功能則是由`urllib2`提供的。所以,當我們試圖在Python2中導入`urllib.request`模塊的時候,一旦我們捕獲到`ImportError`我們將通過導入`urllib2`模塊來代替它。 最后,你要了解`as`關鍵字的作用。它將導入的模塊映射到`urllib.request`,所以我們通過`urllib_request`這個別名就可以使用`urllib2`中的所有類和方法了。 **過期的Python2內置功能** 另一個需要了解的事情就是Python2中有12個內置功能在Python3中已經被移除了。要確保在Python2代碼中不要出現這些功能來保證對Python3的兼容。這有一個強制讓你放棄12內置功能的方法: ~~~ from future.builtins.disabled import * ~~~ 現在,只要你嘗試在Python3中使用這些被遺棄的模塊時,就會拋出一個`NameError`異常如下: ~~~ from future.builtins.disabled import * apply() # Output: NameError: obsolete Python 2 builtin apply is disabled ~~~ **標準庫向下兼容的外部支持** 有一些包在非官方的支持下為Python2提供了Python3的功能。例如,我們有: - enum `pip install enum34` - singledispatch `pip install singledispatch` - pathlib `pip install pathlib` 想更多了解,在Python文檔中有一個[全面的指南](https://docs.python.org/3/howto/pyporting.html)可以幫助你讓你的代碼同時兼容Python2和Python3。
                  <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>

                              哎呀哎呀视频在线观看