1. 談談對 Python 和其他語言的區別
答:
Python 是一門強類型的可移植、可擴展、可嵌入的解釋型編程語言,屬于動態語言;其語法簡潔優美、功能強大無比、應用領域非常廣泛且具有強大完備的第三方庫。
(注:語言有無類型,弱類型和強類型三種。強類型指的是程序中表達的任何對象所從屬的類型都必須能在編譯時刻確定。常見的強類型語言有C++、Java、Apex和Python等。)
拿 C 語言和 Python 比: Python 的第三方類庫比較齊全并且使用簡潔,很少代碼就能實現一些功能,如果用 C 去實現相同的功能可能就比較復雜。
但是對于速度來說 Python 的運行速度相較于 C 就比較慢了。所以有利的同時也有弊端,畢竟我們的學習成本降低了。
2. 簡述解釋型和編譯型編程語言
答:
編譯型語言是指使用專門的編譯器,針對特定平臺(操作系統)將某種高級語言源代碼,一次性“翻譯”成可被該平臺硬件執行的機器語言(包括機器指令和操作數),并包裝成該平臺所能識別的可執行程序的格式,這個轉換過程稱為編譯(Compile)。
編譯生成的可執行程序可以脫離開發環境,在特定的平臺上獨立運行
解釋型語言是指使用專門的解釋器,將源程序逐行解釋成特定平臺的機器代碼并立即執行的語言。
解釋型語言通常不會進行整體性的編譯和鏈接處理,解釋型語言相當于把編譯型語言中的編譯和解釋過程混合到一起同時完成。
可以這樣認為,每次執行解釋型語言的程序都需要進行一次編譯,因此解釋型語言的程序運行效率通常較低,而且不能脫離解釋器獨立運行。但解釋型語言有一個優勢,就是跨平臺比較容易,只需提供特定平臺的解釋器即可,每個特定平臺上的解釋器都負責將源程序解釋成特定平臺的機器指令。
也就是說,解釋型語言可以方便地實現源程序級的移植,但這是以犧牲程序執行效率為代價的。
編譯型語言和解釋型語言的對比如圖所示。
不難理解,編譯型語言和解釋型語言的區別在于,編譯是對高級語言程序進行一次性翻譯,這樣的好處是,一旦源程序被徹底翻譯,它就可以重復運行,且今后都不再需要編譯器和源代碼;而如果使用解釋器,則高級語言程序每次運行,都需要借助源程序和解釋器,其最大的好處就是,程序有很好的可移植性。
3. Python 的解釋器種類以及相關特點?
答:
CPython–c 語言開發的,使用最廣的解釋器
IPython–基于 cPython 之上的一個交互式計時器,交互方式增強功能和 cPython 一樣
PyPy–目標是執行效率,采用 JIT 技術。對 Python 代碼進行動態編譯,提高執行效率
JPython–運行在 Java 上的解釋器,直接把 Python 代碼編譯成 Java 字節碼執行
IronPython–運行在微軟 .NET 平臺上的解釋器,把 Python 編譯成 . NET 的字節碼。
4. Python3 和 Python2 的區別?
答: 這里例舉 5 條
print 在 Python3 中是函數,必須加括號;Python2 中 print 為 class。
Python2 中使用 xrange,Python3 使用 range。
Python2 中默認的字符串類型是 ASCII,Python3 中默認的字符串類型是 Unicode。
Python2 中/的結果是整型,Python3 中是浮點類型。
Python2 中聲明元類:metaclass = MetaClass, Python3 中聲明元類:class newclass(metaclass=MetaClass):pass。
5. Python3 和 Python2 中 int 和 long 區別?
答:
Python2 有 int 和 long 類型。int 類型最大值不能超過 sys.maxint,而且這個最大值是平臺相關的。可以通過在數字的末尾附上一個L來定義長整型,顯然,它比 int 類型表示的數字范圍更大。
在 Python3 里,只有一種整數類型 int,大多數情況下,表示為長整型,沒有 python2 中的 Long。和 Python2中的長整型類似。
6. xrange 和 range 的區別?
答:
首先得說明一下,只有在python2中才有xrange和range,python3中沒有xrange,并且python3中的range和python2中的range有 本質的區別。所以這兒說的range和xrange的區別是只針對python2的。
在py2中,range得到的是一個列表,即
x = range(0, 5)
print(type(x)) # 打印x的類型,結果是list
print(x) # 結果是[0,1,2,3,4]
xrange得到的是一個生成器對象, 即
x = xrange(0, 5)
print(type(x)) # 輸出類型,結果為一個生成對象
print(x) # 輸出x, 結果為xrange(0,5)
那么,python3中為什么沒有了range了呢(額,這個怎么描述呢,是有range,但是這個range其實是py2中的xrange,而不是range),因為使用生成器可以節約內存。比如現在有個代碼是for i in range(0, 10000),如果還是使用py2中的range的話,那么就會得到一個0到9999的一個列表,這個將會占用很大的空間,但是使用生成器的話,不需要一上來就開辟一塊很大的內存空間,會節省很大的資源。