欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

13條Python2.x和3.x的區(qū)別?-創(chuàng)新互聯(lián)

從今天開始,小明將和你一起過一下,那些在面試「Python開發(fā)」崗位時面試官喜歡問的問題。內(nèi)容基礎(chǔ),但是你不一定會噢。

超過10年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站建設(shè)、網(wǎng)站制作,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,小程序定制開發(fā),微信開發(fā),成都app軟件開發(fā)公司,同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

這些問題全部來自個人經(jīng)驗,群友推薦以及網(wǎng)絡(luò)上的帖子。如果你有好的問題,也可以隨時向我提出(不要覺得簡單),我會篩選后整理出來在這里,供大家學(xué)習(xí)取經(jīng),給大家在求職路上貢獻(xiàn)一份力。

開篇講些什么好呢?

今天就來羅列一下,Python2.x和3.x到底有哪些區(qū)別吧。

去×××

你隨便全使用搜索引擎都可以查到這些資料,但是大家說的都是一些普遍都知道的事兒。或者都是抄來抄去,內(nèi)容相差無幾。

授人以魚,不如授人以漁。

在列舉之前,我要先教下大家,如何找到那沒有經(jīng)人加工過的第一手資料。

那當(dāng)然是官網(wǎng)啦:https://www.python.org/downloads/

這個地址里,有所有Python歷史版本(2.0+)。
點擊左邊,Release Version欄目 對應(yīng)的版本。
13條Python2.x和3.x的區(qū)別?

進(jìn)入對應(yīng)詳情頁后,找到如圖 what's new in Python xx 就可以查看此版本的新特性。
13條Python2.x和3.x的區(qū)別?

網(wǎng)頁是全英文的,需要你有一定的英文閱讀能力。快去感覺一下吧。

接下來。和大家一起過一下,Python2.x和3.x到底有哪些區(qū)別,這不僅在你開發(fā)過程中需要考慮的,也是面試過程面試官經(jīng)常會問及的。

1. print

在Python 2.6之前,只支持

print "hello"

在Python 2.6和2.7中,可以支持如下三種

print "hello"
print("hello")
print ("hello")

在Python3.x中,可以支持如下兩種

print("hello")
print ("hello")

2. 編碼方式

在Python2.x中,默認(rèn)使用ASCII編碼。

所以默認(rèn)情況下,我們不能在程序中使用中文。若要使用中文,必須在文件頭部,聲明使用 "UTF-8" 編碼,并在使用的時候注意編碼轉(zhuǎn)換,要打印的時候需先轉(zhuǎn)成"Unicode"編碼,否則會亂碼。

Python 2的正確使用方法,如下

# coding:utf-8

str1="中國"
print str1.decode("utf-8")

亦或者可以這樣,u表示,這個字符串使用Unicode編碼,不再需要轉(zhuǎn)換。

# coding:utf-8

str1=u"中國"
print str1

在Python3.x中,默認(rèn)使用Unicode的UTF-8編碼。

所以我們可以在程序中,隨意的使用中文(但并不推薦),不會報錯。

3. 除法運(yùn)算

Python 2.x中除法運(yùn)算,整數(shù)間運(yùn)算只保留整數(shù)(向下取整)。

>>> 8/2
4
>>> 8/3
2
>>> -8/3
-3
>>> -8/3.0
-2.6666666666666665

Python 3.x中除法運(yùn)算,全部保留小數(shù)(即使能被整除)。

>>> 8/2
4.0
>>> 8/3
2.6666666666666665

這里要說明一下,3.x 中的//用法和 2.x 用法是一樣的。這個運(yùn)算叫做 floor 運(yùn)算,即向下取整。

>>> 8//2   
4          
>>> 8//3   
2
>>> -8//3.0
-3.0

4. 異常捕獲

在 Python 3 中,只能使用 as 作為關(guān)鍵詞。而在Python 2中經(jīng)常使用 except Exception, e
使用語法except (exc1, exc2) as var可以同時捕獲多種類別的異常。

Python 2.6已經(jīng)支持這兩種語法。

  • 在2.x時代,所有類型的對象都是可以被直接拋出的,在3.x時代,只有繼承自BaseException的對象才可以被拋出。
  • 2.x raise語句使用逗號將拋出對象類型和參數(shù)分開,3.x取消了這種奇葩的寫法,直接調(diào)用構(gòu)造函數(shù)拋出對象即可。

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

5. xrange

首先,要了解的是,xrange是只有在Python2.x中才有的產(chǎn)物。

在 2.x 中xrange和range的使用方法可以說完全一致。只是從內(nèi)部來看,range是返回一個list對象,而xrange返回一個生成器對象,所以在處理大批量數(shù)據(jù)時,xrange的性能會更好。

>>>xrange(1,5)
xrange(1, 5)

>>>list(xrange(1,5))
[1, 2, 3, 4]

而在3.x 中,只有range函數(shù),為什么沒有xrange,因為3.x中的range其實就是2.x中的xrange。你可以這樣理解。

>>> range(10)
range(0, 10)

6. 用戶輸入

在2.x 中,有兩個函數(shù)。raw_input()和input()。

  • raw_input():將所有輸入作為字符串看待,返回字符串類型。
  • input():只能接收"數(shù)字"的輸入。

在3.x 中,對這兩個函數(shù)進(jìn)行整合,只留下一個input(),既可輸入數(shù)字,也可輸入字符串,返回的是字符串類型。

7. 數(shù)據(jù)類型

Python 3.x 一個很重要的特性是,對字符串和二進(jìn)制數(shù)據(jù)流做了明確的區(qū)分。

文本總是Unicode,由str類型表示,二進(jìn)制數(shù)據(jù)則由bytes類型表示。

Python 3不會以任意隱式的方式混用str和bytes,你不能拼接字符串和字節(jié)流,也無法在字節(jié)流里搜索字符串(反之亦然),也不能將字符串傳入?yún)?shù)為字節(jié)流的函數(shù)(反之亦然)。

更為詳細(xì)的剖析,可以前往:https://www.cnblogs.com/chownjy/p/6625299.html

還有一點是,3.X去除了long類型,取代它的是整型(int)。3.x的整型是沒有限制大小的,可以當(dāng)做long類型使用, 但實際上由于機(jī)器內(nèi)存的有限,我們使用的整數(shù)是不可能無限大的。

8. 函數(shù)式編程

在Python中,我們常常使用到的map,filter,reduce,在2.x和3.x中也有所不同。

在2.x中,這三貨,是內(nèi)建函數(shù)。返回的是一個列表。


>>> map
<built-in function map>

>>> filter
<built-in function filter>

>>> map(lambda x:x *2, [1,2,3])
[2, 4, 6]

>>> filter(lambda x:x %2 ==0,range(10))
[0, 2, 4, 6, 8]

在3.x中,前面兩貨,卻變成類了。返回的是可迭代對象。

>>> map
<class 'map'>

>>> map(print,[1,2,3])
<map object at 0x10d8bd400>

>>> filter
<class 'filter'>

>>> filter(lambda x:x % 2 == 0, range(10))
<filter object at 0x10d8bd3c8>

對于 reduce 函數(shù),它在 Python 3.x 中已經(jīng)不屬于 built-in 了,被挪到 functools 模塊當(dāng)中。

9. 協(xié)程關(guān)鍵字

在Python3.3后,協(xié)程中,新增了yield from 和 async/await 關(guān)鍵字,這在2.x中是沒有。

關(guān)于yield from的語法剖析,可以前往查看我的另一篇文章。

10. 類的類型

Python2.x 默認(rèn)使用經(jīng)典類,只有顯示繼承object才是新式類。

Python3.x 沒有經(jīng)典類,只有新式類,而且有三種寫法

class Cls:
    pass

class Cls():
    pass

class Cls(object):
    pass

11. 變量作用域

  • 在2.x中無法將局部變量聲明為全局變量。
  • 在3.x中可以使用nonlocal語法將局部變量聲明為全局變量。
def foo():
    var=100
    def bar():
        nonlocal var
        var=200
    bar()
    print(var)
foo()

# 2.x輸出:100
# 3.x輸出:200

12. 元類的使用

在2.x 中

class Metaclass(type):
    pass

class Person(list):
    __metaclass__ = Metaclass 
    pass

在3.x中

class MetaPerson(type):
    pass

class Person(metaclass=MetaPerson):
    pass

13. 模塊變化

  • 去掉了一些模塊。由于不常用,這里就不列舉了。
  • 新增了一些模塊。比如:concurrent.futures,asyncio等
  • 修改了一些模塊。比如:Queue改成queue。

大概就是這些內(nèi)容,可能還有更細(xì)微的差別,這些內(nèi)容要前往官網(wǎng)查看。但是那些對于我們普通開發(fā)者來說,并不那么重要。完全可以不去關(guān)注。

實際上,當(dāng)我熟悉一個版本后,基本上是可以無縫過渡到另一個版本的。這篇文章,更多的是為了科普和應(yīng)對面試。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前題目:13條Python2.x和3.x的區(qū)別?-創(chuàng)新互聯(lián)
本文鏈接:http://www.chinadenli.net/article20/ijsco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站內(nèi)鏈云服務(wù)器靜態(tài)網(wǎng)站面包屑導(dǎo)航營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管