亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python 2.x 與 Python 3.x 的區(qū)別

LittleLiByte / 3440人閱讀

摘要:官方也宣布在停止對(duì)的維護(hù)。并且在很多面試過程中,面試官都會(huì)問與的區(qū)別。的版本,常被稱為,或簡(jiǎn)稱。與部分地支持這種形式的語法。捕獲異常的語法由改為。在中,表示八進(jìn)制字面量的方式只有一種,就是。已經(jīng)支援新的模組。

前言

如果你是剛接觸 Python 的初學(xué)者,那你可能是直接學(xué)習(xí) Python 3.x 版本。對(duì)于 Python 2.x 的版本是不會(huì)有所接觸。官方也宣布在 2020 停止對(duì) Python 2.x 的維護(hù)。我也建議初學(xué)者直接去學(xué) Python 3.x 版本。但我們還是要去了解下 Python 3.x 與 Python 2.x 之間都有哪些改變,通過對(duì)比能讓你對(duì) Python 有更加深刻的理解。并且在很多面試過程中,面試官都會(huì)問:Python 2.x 與 Python 3.x 的區(qū)別。今天就給大家列舉 Python 3.0 主要改變的幾個(gè)方面。

Py3K

Python 的 3.0 版本,常被稱為 Python 3000,或簡(jiǎn)稱 Py3K。

為了照顧現(xiàn)有程式,Python 2.6 作為一個(gè)過度版本,基本使用了 Python 2.x 得語法和庫,同時(shí)考慮了向 Pythn 3.0 得遷移,允許使用部分 Python 3.0 的語法與函數(shù)。

Python 3.0 的變化主要在以下幾個(gè)方面:

1 print 函數(shù)

print 語句沒有了,取而代之的是 print() 函數(shù)。Python 2.6 與 Python 2.7 部分地支持這種形式的 print 語法。在 Python 2.6 與 Python 2.7 里面,以下三種形式是等價(jià)的:

print "fish"
print ("fish") # 注意 print 后面有個(gè)空格
print("fish") # print() 不能帶有任何其它參數(shù) 

然后,Python 2.6 實(shí)際已經(jīng)支持新得 print() 語法:

from __future__ import print_function
print("fish", "panda", sep=", ") 
2 Unicode

Python 2 有 ASCII str() 類型,unicode() 是多帶帶的,不是 byte 類型。

現(xiàn)在,在 Python 3 ,我們最終有了 Unicode(utf-8) 字符串,以及一個(gè)字節(jié)類:byte 和 bytearrays。

由于 Python 3.x 源碼文件默認(rèn)使用 uft-8 編碼,這就使得以下代碼是合法的:

>>> 中國 = "china"
>>> print(中國)
china 

Python 2.x

>>> str = "我愛北京天安門"
>>> str
"xe6x88x91xe7x88xb1xe5x8cx97xe4xbaxacxe5xa4xa9xe5xaex89xe9x97xa8"
>>> str = u"我愛北京天安門"
>>> str 

Python 3.x

>>> str = "我愛北京天安門"
>>> str
"我愛北京天安門" 
3 除法運(yùn)算

Python 中的除法較其它語言顯得非常高端,有套很復(fù)雜的規(guī)則。Python 中的除法有兩個(gè)運(yùn)算符,/ 和 // 首先來說下 / 除法:

在 python 2.x 中 / 除法就跟我們熟悉的大多數(shù)語言,比如 Java、C 差不多,整數(shù)相除的結(jié)果是一個(gè)整數(shù),把小數(shù)部分完全忽略掉,浮點(diǎn)數(shù)除法會(huì)保留小數(shù)點(diǎn)的部分得到一個(gè)浮點(diǎn)數(shù)的結(jié)果。

在 python3.x 中 / 除法不再這么做了,對(duì)于整數(shù)之間的相除,結(jié)果也會(huì)是浮點(diǎn)數(shù)。

Python 2.x

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5 

Python 3.x

>>> 1/2
0.5 

而對(duì)于 // 除法,這種除法叫做 floor 除法,會(huì)對(duì)除法的結(jié)果自動(dòng)進(jìn)行一個(gè) floor 操作,在 python 2.x 和 python 3.x 中是一致的。

而 floor 除法指的是返回?cái)?shù)字的下舍整數(shù),在 Python 中有個(gè) floor 函數(shù),它不能直接訪問,需要導(dǎo)入 math 模塊,通過靜態(tài)對(duì)象調(diào)用該方法。舉個(gè)例子:

import math   # This will import math module
print "math.floor(-45.17) : ", math.floor(-45.17) 

輸出結(jié)果:

math.floor(-45.17) :  -46.0 

python 2.x:

>>> -1 // 2
-1 

注意的是并不是舍棄小數(shù)部分,而是執(zhí)行 floor 操作,如果要截取小數(shù)部分,那么需要使用 math 模塊的 trunc 函數(shù)

python 3.x

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0 
4 異常

在 Python 3 中處理異常也輕微的改變了,在 Python 3 中我們現(xiàn)在使用 as 作為關(guān)鍵詞。

捕獲異常的語法由 except exc, var 改為 except exc as var。

使用語法 except (exc1, exc2) as var 可以同時(shí)捕獲多種類別的異常。 Python 2.6 已經(jīng)支持這兩種語法。

1. 在 2.x 時(shí)代,所有類型的對(duì)象都是可以被直接拋出的,在 3.x 時(shí)代,只有繼承自 BaseException 的對(duì)象才可以被拋出。

2. 2.x raise 語句使用逗號(hào)將拋出對(duì)象類型和參數(shù)分開,3.x 取消了這種奇葩的寫法,直接調(diào)用構(gòu)造函數(shù)拋出對(duì)象即可。

在 2.x 時(shí)代,異常在代碼中除了表示程序錯(cuò)誤,還經(jīng)常做一些普通控制結(jié)構(gòu)應(yīng)該做的事情,在 3.x 中可以看出,設(shè)計(jì)者讓異常變的更加專一,只有在錯(cuò)誤發(fā)生的情況才能去用異常捕獲語句來處理。

5 xrange

在 Python 2 中 xrange() 創(chuàng)建迭代對(duì)象的用法是非常流行的。比如: for 循環(huán)或者是列表/集合/字典推導(dǎo)式。

這個(gè)表現(xiàn)十分像生成器(比如。"惰性求值")。但是這個(gè) xrange-iterable 是無窮的,意味著你可以無限遍歷。

由于它的惰性求值,如果你不得僅僅不遍歷它一次,xrange() 函數(shù) 比 range() 更快(比如 for 循環(huán))。盡管如此,對(duì)比迭代一次,不建議你重復(fù)迭代多次,因?yàn)樯善髅看味紡念^開始。

惰性求值:惰性求值,也就是延遲求值,表達(dá)式不會(huì)在它被綁定到變量之后就立即求值,而是等用到時(shí)再求值。

作用:這個(gè)特性可以解決一些巨大甚至無限的集合列表,延遲求值的一個(gè)好處是能夠建立可計(jì)算的無限列表,而沒有妨礙計(jì)算的無限循環(huán)或大小問題。

Python 中的很多方法沒有直接返回列表,而是返回了一個(gè)可迭代的 generator (生成器)對(duì)象,這便是 python 的惰性求值。

在 Python 3 中,range() 是像 xrange() 那樣實(shí)現(xiàn)以至于一個(gè)專門的 xrange() 函數(shù)都不再存在(在 Python 3 中 xrange() 會(huì)拋出命名異常)。

import timeit
n = 10000
def test_range(n):
    return for i in range(n):
        pass
def test_xrange(n):
    for i in xrange(n):
        pass 

Python 2

print "Python", python_version()
print "
timing range()" 
%timeit test_range(n)
print "

timing xrange()" 
%timeit test_xrange(n)
Python 2.7.6
timing range()
1000 loops, best of 3: 433 μs per loop
timing xrange()
1000 loops, best of 3: 350 μs per loop 

Python 3

print("Python", python_version())
print("
timing range()")
%timeit test_range(n)
Python 3.4.1
timing range()
1000 loops, best of 3: 520 μs per loop 
print(xrange(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in ()
----> 1 print(xrange(10))
NameError: name "xrange" is not defined 
6 八進(jìn)制字面量表示

八進(jìn)制數(shù)必須寫成 0o777,原來的形式 0777 不能用了;二進(jìn)制必須寫成 0b111。

新增了一個(gè) bin() 函數(shù)用于將一個(gè)整數(shù)轉(zhuǎn)換成二進(jìn)制字串。 Python 2.6 已經(jīng)支持這兩種語法。

在 Python 3.x 中,表示八進(jìn)制字面量的方式只有一種,就是 0o1000。

pyhon 2.x

>>> 0o1000
512
>>> 01000
512 

python 3.x

>>> 01000
  File "", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512 
7 不等運(yùn)算符

Python 2.x 中不等于有兩種寫法 != 和 <>

Python 3.x 中去掉了 <>,只有 != 一種寫法。

8 去掉了 repr 表達(dá)式 ``

Python 2.x 中反引號(hào) `` 相當(dāng)于 repr 函數(shù)的作用

Python 3.x 中去掉了 `` 這種寫法,只允許使用 repr 函數(shù)。

repr 是什么:repr() 函數(shù)將對(duì)象轉(zhuǎn)化為供解釋器讀取的形式,返回一個(gè)對(duì)象的 string 格式。

9 多個(gè)模塊被改名(根據(jù) PEP8)

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib 被合并到 http 包內(nèi)。StringIO 模塊現(xiàn)在被合并到新的 io 模組內(nèi)。 new, md5, gopherlib 等模塊被刪除。 Python 2.6 已經(jīng)支援新的 io 模組。

取消了 exec 語句,只剩下 exec() 函數(shù)。 Python 2.6 已經(jīng)支援 exec() 函數(shù)。

10 數(shù)據(jù)類型

1)Py3.X 去除了 long 類型,現(xiàn)在只有一種整型——int,但它的行為就像 2.X 版本的 long。

2)新增了 bytes 類型,對(duì)應(yīng)于 2.x 版本的八位串,定義一個(gè) bytes 字面量的方法如下:

>>> b = b"china" 
>>> type(b) 
 

str 對(duì)象和 bytes 對(duì)象可以使用 .encode() (str -> bytes) or .decode() (bytes -> str) 方法相互轉(zhuǎn)化。

>>> s = b.decode() 
>>> s 
"china" 
>>> b1 = s.encode() 
>>> b1 
b"china" 

3)dict 的 .keys()、.items 和 .values() 方法返回迭代器,而之前的 iterkeys() 等函數(shù)都被廢棄。同時(shí)去掉的還有 dict.has_key(),用 in 替代它。

11 打開文件

原先有兩種打開方式:

file( ..... )
或 
open(.....) 

現(xiàn)在改成只能用

open(......) 
12 從鍵盤錄入一個(gè)字符串
raw_input("提示信息") 

現(xiàn)在:

input("提示信息") 

在 python2.x 中 raw_input() 和 input( ),兩個(gè)函數(shù)都存在,其中區(qū)別為:

raw_input():將所有輸入作為字符串看待,返回字符串類型

input():只能接收"數(shù)字"的輸入,在對(duì)待純數(shù)字輸入時(shí)具有自己的特性,它返回所輸入的數(shù)字的類型(int, float )

在 python3.x 中 raw_input() 和 input( ) 進(jìn)行了整合,去除了 raw_input(),僅保留了 input() 函數(shù),其接收任意任性輸入,將所有輸入默認(rèn)為字符串處理,并返回字符串類型。

本文首發(fā)于公眾號(hào)「癡?!梗笈_(tái)回復(fù)「1024」,領(lǐng)取最新 Python 教程。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42042.html

相關(guān)文章

  • Python2.x3??.x版本區(qū)別

    Python的3??.0版本,常被稱為Python 3000,或簡(jiǎn)稱Py3k。相對(duì)于Python的早期版本,這是一個(gè)較大的升級(jí)。為了不帶入過多的累贅,Python 3.0在設(shè)計(jì)的時(shí)候沒有考慮向下相容。許多針對(duì)早期Python版本設(shè)計(jì)的程式都無法在Python 3.0上正常執(zhí)行。為了照顧現(xiàn)有程式,Python 2.6作為一個(gè)過渡版本,基本使用了Python 2.x的語法和庫,同時(shí)考慮了向Python...

    neu 評(píng)論0 收藏0
  • Python 面試」第四次更新

    摘要:解決的辦法在處理計(jì)算密集型任務(wù)時(shí),使用多進(jìn)程協(xié)程,發(fā)揮計(jì)算機(jī)多核的威力,而處理密集型,則可以使用多線程。至此,有關(guān)知識(shí)點(diǎn)的面試題就已告一段落,下次更新數(shù)據(jù)庫,方面面試題。 showImg(https://segmentfault.com/img/bVbuYzy?w=3484&h=2480); 閱讀本文大約需要 5 分鐘。 15.說一說 GIL 前面有提到由于 Python 基于 C 語...

    hellowoody 評(píng)論0 收藏0
  • 詳解python2python3區(qū)別

    摘要:認(rèn)為有極大的優(yōu)化空間,在字符串和整形操作上可以取得很好的優(yōu)化結(jié)果。的和方法返回迭代器,而之前的等函數(shù)都被廢棄。python有兩個(gè)主要的版本,python2 和 python3 ,但是python又不同于其他語言,向下兼容,python3是不向下兼容的,但是絕大多數(shù)組件和擴(kuò)展都是基于python2的,下面就來總結(jié)一下python2和python3的區(qū)別。 ? 1.性能? Py3.0運(yùn)...

    Sourcelink 評(píng)論0 收藏0
  • 詳解python2python3區(qū)別

    摘要:認(rèn)為有極大的優(yōu)化空間,在字符串和整形操作上可以取得很好的優(yōu)化結(jié)果。的和方法返回迭代器,而之前的等函數(shù)都被廢棄。python有兩個(gè)主要的版本,python2 和 python3 ,但是python又不同于其他語言,向下兼容,python3是不向下兼容的,但是絕大多數(shù)組件和擴(kuò)展都是基于python2的,下面就來總結(jié)一下python2和python3的區(qū)別。 ? 1.性能? Py3.0運(yùn)...

    Martin91 評(píng)論0 收藏0
  • Python3 關(guān)鍵字nonlocal和global用法區(qū)別

    摘要:關(guān)鍵字在中,閉包只能讀外部函數(shù)的變量,而不能改寫它。注意關(guān)鍵字是中出現(xiàn)的所以在中無法直接使用關(guān)鍵字里只有種作用域全局作用域和局部作用域。兩者使用的范圍不同。 關(guān)鍵字nonlocal 在Python 2.x中,閉包只能讀外部函數(shù)的變量,而不能改寫它。為了解決這個(gè)問題,Python 3.x引入了nonlocal關(guān)鍵字,在閉包內(nèi)用nonlocal聲明變量,就可以讓解釋器在外層函數(shù)中查找變量名...

    PumpkinDylan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<