從今天開始,小明將和你一起過一下,那些在面試「Python開發(fā)」崗位時面試官喜歡問的問題。內(nèi)容基礎(chǔ),但是你不一定會噢。
這些問題全部來自個人經(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)的版本。
進(jìn)入對應(yīng)詳情頁后,找到如圖 what's new in Python xx
就可以查看此版本的新特性。
網(wǎng)頁是全英文的,需要你有一定的英文閱讀能力。快去感覺一下吧。
接下來。和大家一起過一下,Python2.x和3.x到底有哪些區(qū)別,這不僅在你開發(fā)過程中需要考慮的,也是面試過程面試官經(jīng)常會問及的。
在Python 2.6之前,只支持
print "hello"
在Python 2.6和2.7中,可以支持如下三種
print "hello"
print("hello")
print ("hello")
在Python3.x中,可以支持如下兩種
print("hello")
print ("hello")
在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編碼。
所以我們可以在程序中,隨意的使用中文(但并不推薦),不會報錯。
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
在 Python 3 中,只能使用 as
作為關(guān)鍵詞。而在Python 2中經(jīng)常使用 except Exception, e
使用語法except (exc1, exc2) as var可以同時捕獲多種類別的異常。
Python 2.6已經(jīng)支持這兩種語法。
在2.x時代,異常在代碼中除了表示程序錯誤,還經(jīng)常做一些普通控制結(jié)構(gòu)應(yīng)該做的事情,在3.x中可以看出,設(shè)計者讓異常變的更加專一,只有在錯誤發(fā)生的情況才能去用異常捕獲語句來處理。
首先,要了解的是,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)
在2.x 中,有兩個函數(shù)。raw_input()和input()。
在3.x 中,對這兩個函數(shù)進(jìn)行整合,只留下一個input()
,既可輸入數(shù)字,也可輸入字符串,返回的是字符串類型。
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ù)是不可能無限大的。
在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)中。
在Python3.3后,協(xié)程中,新增了yield from 和 async/await 關(guān)鍵字,這在2.x中是沒有。
關(guān)于yield from的語法剖析,可以前往查看我的另一篇文章。
Python2.x 默認(rèn)使用經(jīng)典類,只有顯示繼承object才是新式類。
Python3.x 沒有經(jīng)典類,只有新式類,而且有三種寫法
class Cls:
pass
class Cls():
pass
class Cls(object):
pass
def foo():
var=100
def bar():
nonlocal var
var=200
bar()
print(var)
foo()
# 2.x輸出:100
# 3.x輸出:200
在2.x 中
class Metaclass(type):
pass
class Person(list):
__metaclass__ = Metaclass
pass
在3.x中
class MetaPerson(type):
pass
class Person(metaclass=MetaPerson):
pass
大概就是這些內(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)
猜你還喜歡下面的內(nèi)容