<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                官方英文文檔:[https://docs.python.org/3/whatsnew/3.0.html](https://docs.python.org/3/whatsnew/3.0.html) 中文翻譯版轉載地址:[http://www.kankanews.com/ICkengine/archives/70301.shtml](http://www.kankanews.com/ICkengine/archives/70301.shtml) 這篇文章總結了一些與Python2.6相比Python3.0中的新特性.Python3是一個不向后兼容的版本,有了很多的改變,這些對于Python開發者來說是非常重要的,雖然多數人說Python3真正流行起來還需要一段時間,但是Python3確實有了很大的改進,現在也是時間來學習Python3了。在真正理解Python3中的一些變化之后,會發現其實Python3的變化并沒有想象的那么多,主要是修復了一些令人討厭的地方。 一般在每一個發行版源碼的Misc/NEWS文件中詳細描述了每一個細小的變化。 ### 1、常見的障礙 #### 1.1 Print是一個函數 在Python3中print是個函數,這意味著在使用的時候必須帶上小括號,并且它是帶有參數的。 ~~~ old: print "The answer is", 2+2 new: print("The answer is", 2+2) old: print x, # 末尾加上逗號阻止換行 new: print(x, end="") # 使用空格來代替新的一行 old: print >>sys.staerr, "fatal error" new: print ("fatal error", file=sys.stderr) old: print (x, y) # 打印出元組(x, y) new: print((x, y)) # 同上,在python3中print(x, y)的結果是跟這不同的 ~~~ 在Python3中還可以定義分隔符,使用參數sep來指定. ~~~ print("There are <", 2+5, ">possibilities", sep="") ~~~ 上面代碼的結果如下: ~~~ There are <7> possibilities ~~~ 注意: - print()函數不支持Python2.X中print中的“軟空格”。在Python2.X中,print “A\n”, “B”的結果是”A\nB\n”;而在Python3中print(“A\n”, “B”)的結果是”A\n B\n”。 - 在剛開始使用Python3的時候,你會發現你經常在交互模式下你還是經常使用老式的語法print x,是時候鍛煉你的手指用print(x)來取代它啦。 - 如果你的項目比較大,而又想升級到Python3的時候,不用擔心,2to3這個工具會將所有的print語句轉換為print()函數。 #### 1.2 使用Views和Iterators代替Lists - dict的方法dict.keys(),dict.items(),dict.values()不會再返回列表,而是返回一個易讀的“views”。這樣一來,像這樣的語法將不再有用了:k = d.keys();k.sort(),你可以使用k = sorted(d)來代替。sorted(d)在Python2.5及以后的版本中也有用,但是Python3效率更高了。 ~~~ d = {'a': 1} d.keys() # dict_keys(['a']) d.items() # dict_items([('a', 1)]) d.values() # dict_values([1]) k = d.keys(); k.sort() # AttributeError: 'dict_keys' object has no attribute 'sort' ~~~ - 同樣,dict.iterkeys(),dict.iteritems(),dict.itervalues()方法也不再支持。 - map()和filter()將返回iterators。如果你真的想要得到列表,list(map(…))是一個快速的方法,但是更好的方法是使用列表推導(尤其是原代碼使用了lambda表達式的時候),或者重寫原來的代碼,改為不需要使用列表。特別是map()會給函數帶來副作用,正確的方法是改為使用for循環,因為創建一個列表是非常浪費的事情。 - Python3中的range()函數跟Python2.X的xrange()函數的作用是一樣的,這樣可以使用任意的數字,Python3中去除了xrange()函數。 - zip()在Python3中返回的是一個迭代器。 #### 1.3 比較符 ? ?Python3簡化了比較符。 - 在使用比較符(<,<=,>=,>)時,當相比較的操作數的排序是沒有意義的時候將會拋出TypeError異常,因此像1 < ”,0 > None,len <= len這樣的語句不再合法了。None < None也會拋出TypeError異常,而不是返回False。你應該明白了,胡亂的比較是沒有意義的,相比較的元素必須是能夠比較的才行。需要注意的是,==和!=不包括在內,因為不通類型的,無法比較元素總是不等于另一個的。 - builtin.sorted和list.sort()不再有提供比較函數的cmp參數,只有參數key和reverse。 - cmp()函數應該當做被去除了,__cmp__()特殊方法也不再支持。在需要的時候使用__lt__,__eg__和__hash__。 #### 1.4 整型數 - 從本質上來說,long重命名了int,因為在內置只有一個名為int的整型,但它基本跟之前的long一樣。 - 像1/2這樣的語句將返回float,即0.5。使用1//2來獲取整型,這也是之前版本所謂的“地板除”。 - 移除了sys.maxint,因為整型數已經沒了限制。sys.maxsize可以用來當做一個比任何列表和字符串下標都要大的整型數。 - repr()中比較大的整型數將不再帶有L后綴。 - 八進制數的字面量使用0o720代替了0720。 #### 1.5 Text Vs. Data 代替 Unicode Vs. 8-bit ? ?Python3中改變了二進制數據和Unicode字符串。 - Python3使用文本和(二進制)數據的理念代替之前的Unicode字符串和8-bit字符串,所有的文本默認是Unicode編碼。使用str類型保存文本,使用bytes類型保存數據。當你混淆文本和數據的時候Python3會拋出TypeError的錯誤。 - 不能再使用u”…”字面量表示unicode文本,而必須使用b”…”字面量表示二進制數據。 - 因為str和bytes不能弄混,所以你必須顯式地將他們進行轉換。使用str.encode()將str轉換為bytes,使用bytes.decode()將bytes轉換為str,也可以使用bytes(s, encoding=…)和str(b, encoding=…)。 - str和bytes都是不可變的類型,有一個分離的可變類型的bytearray可以保存緩存的二進制數據,所有能夠接受bytes的API都能夠使用bytearray。這些可變的API是基于collections.MutableSequence的。 - 移除了抽象類型basestring,使用str代替。 - 文件默認使用文本類型打開,這也是open()函數默認的。如果要打開二進制文件必須使用b參數,否則會出現錯誤,而不會默默地提供錯誤的數據。 - 文件名都使用unicode字符串傳入和輸出。 - 一些關于系統的API,如os.environ和sys.argv,當系統允許bytes并且不能正常轉換為unicode的話,也會出現問題。所以,將系統的LANG設置好是最好的做法。 - repr()函數不再轉義非ASCII字符。 - 代碼默認為UTF-8編碼。 - 移除了StringIO和cStringIO。加入了io模塊,并分別使用io.StringIO和io.BytesIO分別用于text和data。 ### 2、語法改變 #### 2.1 新增語法 - 函數變量和返回值[annotations](http://www.python.org/dev/peps/pep-3107/)。 - [Keyword-only](http://www.python.org/dev/peps/pep-3102/)變量。 - nonlocal聲明。使用nonlocal x可以直接引用一個外部作用域的變量,但不是全局變量。 - 擴展了迭代的解包。 ~~~ (a, *rest, b) = range(5) a # 0 rest # [1,2,3] b # 4 ~~~ - 字典推導。{k: v for k, v in stuff }。 ~~~ t = ((1,1), (2,2)) d = {k: v for k, v in t} d # {1: 1, 2: 2} ~~~ - 集合推導。{x for x in stuff},與set(stuff)效果一樣,但是更加靈活。 - 八進制字面量0o720。 - 二進制字面量0b1010,相當于新的內置函數bin()。 - 字節字面量b或者B,相當于新的內置函數bytes()。 #### 2.2 改變的語法 ~~~ # old class C: __metaclass__ = M .... # new class C(metaclass=M): .... ~~~ - 列表推導不再支持[... for var in item1, item2, ...],必須寫成[... for var in (item1, item2,...)]。 - 省略號…作為連續表達式可以用于任何地方,之前只能用于分片中。但是必須連續寫,之前帶空格的. . .不再支持。 #### 2.3 移除的語法 - 移除了元組的解包。不能再寫def foo(a, (b, c)): ….,需要寫成def foo(a, b_c):b, c = b_c。 - 移除<>,使用!=代替。 - exec()不能再作為關鍵詞,只能作為一個函數。并且exec()不再支持流變量,如exec(f)需寫成exec(f.read())。 - 整型不支持l/L后綴。 - 字符串不支持’u/U’前綴。 - from module import *只能用在模塊級,在函數中不可使用。 - 所有不以.開始的import語句均作為絕對路徑的import對待。 - 移除了經典類。 ### 3、推薦閱讀: ### 使用 2to3 將代碼移植到 Python 3 [http://woodpecker.org.cn/diveintopython3/porting-code-to-python-3-with-2to3.html](http://woodpecker.org.cn/diveintopython3/porting-code-to-python-3-with-2to3.html) Moving from Python 2 to Python 3 [http://ptgmedia.pearsoncmg.com/imprint_downloads/informit/promotions/python/python2python3.pdf](http://ptgmedia.pearsoncmg.com/imprint_downloads/informit/promotions/python/python2python3.pdf)
                  <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>

                              哎呀哎呀视频在线观看