北京IT培訓
美國上市IT培訓機構

010-62126400

熱門課程

北京達內 > 雇主企業 > 企業面試題 >Python面試常見的8個問題及答案總結

Python面試常見的8個問題及答案總結

  • 時間:2020-01-14 11:08
  • 發布:北京達內
  • 來源:企業面試題

達內北京Python培訓機構為大家總結下python面試題匯總,送給有需要的人!

第一家公司問的題目

1 簡述解釋型和編譯型編程語言?

解釋型語言編寫的程序不需要編譯,在執行的時候,專門有一個解釋器能夠將VB語言翻譯成機器語言,每個語句都是執行的時候才翻譯。這樣解釋型語言每執行一次就要翻譯一次,效率比較低。

用編譯型語言寫的程序執行之前,需要一個專門的編譯過程,通過編譯系統,把源高級程序編譯成為機器語言文件,翻譯只做了一次,運行時不需要翻譯,所以編譯型語言的程序執行效率高,但也不能一概而論,

部分解釋型語言的解釋器通過在運行時動態優化代碼,甚至能夠使解釋型語言的性能超過編譯型語言。

2 Python解釋器種類以及特點?

CPython

當 從Python官方網站下載并安裝好Python2.7后,就直接獲得了一個官方版本的解釋器:Cpython,這個解釋器是用C語言開發的,所以叫 CPython,在命名行下運行python,就是啟動CPython解釋器,CPython是使用最廣的Python解釋器。

IPython

IPython是基于CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的,好比很多國產瀏覽器雖然外觀不同,但內核其實是調用了IE。

PyPy

PyPy是另一個Python解釋器,它的目標是執行速度,PyPy采用JIT技術,對Python代碼進行動態編譯,所以可以顯著提高Python代碼的執行速度。

Jython

Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節碼執行。

IronPython

IronPython和Jython類似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的字節碼。

在Python的解釋器中,使用廣泛的是CPython,對于Python的編譯,除了可以采用以上解釋器進行編譯外,技術高超的開發者還可以按照自己的需求自行編寫Python解釋器來執行Python代碼,十分的方便!

3 位和字節的關系?

bit就是位,也叫比特位,是計算機表示數據最小的單位

byte就是字節

1byte=8bit

1byte就是1B

一個字符=2字節

1KB=1024B

字節就是Byte,也是B

位就是bit也是b

轉換關系如下:1)1KB=1024B

1B= 8b

4 請至少列舉5個 PEP8 規范(越多越好)。

PEP8 編碼規范

a.不要在行尾加分號, 也不要用分號將兩條命令放在同一行。

b.每行不超過80個字符(長的導入模塊語句和注釋里的URL除外)

c.不要使用反斜杠連接行。Python會將圓括號, 中括號和花括號中的行隱式的連接起來

d.寧缺毋濫的使用括號,除非是用于實現行連接, 否則不要在返回語句或條件語句中使用括號. 不過在元組兩邊使用括號是可以的.

e.用4個空格來縮進代碼,不要用tab, 也不要tab和空格混用. 對于行連接的情況, 你應該要么垂直對齊換行的元素,或者使用4空格的懸掛式縮進

f.頂級定義之間空2行, 方法定義之間空1行,頂級定義之間空兩行, 比如函數或者類定義. 方法定義, 類定義與第一個方法之間, 都應該空一行. 函數或方法中, 某些地方要是你覺得合適, 就空一行.

5 通過代碼實現如下轉換:

二進制轉換成十進制:v = “0b1111011”

#先將其轉換為字符串,再使用int函數,指定進制轉換為十進制。

print(int("0b1111011",2))

值為123

十進制轉換成二進制:v = 18

print("轉換為二進制為:", bin(18))

#轉換為二進制為:0b10010

八進制轉換成十進制:v = “011”

print(int("011",8))

#9

十進制轉換成八進制:v = 30

print("轉換為八進制為:", oct(30))

#轉換為八進制為:0o36

十六進制轉換成十進制:v = “0x12”

print(int("0x12",16))

#18

十進制轉換成十六進制:v = 87

print("轉換為十六進制為:", hex(87))

轉換為十六進制為: 0x57

6 python遞歸的最大層數?

def fab(n):

if n == 1:

return 1

else:

return fab(n-1)+ n

print (fab(998))

#得到的最大數為998,以后就是報錯了,998這個數值莫名想起廣告詞····

import sys

sys.setrecursionlimit(100000)

def foo(n):

print(n)

n += 1

foo(n)

if __name__ == '__main__':

foo(1)

#得到的最大數字在3922-3929之間浮動,這個是和計算機有關系的,將數字調到足夠大了,已經大于系統堆棧,python已經無法支撐到太大的遞歸崩了。

7 ascii、unicode、utf-8、gbk 區別?

最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

但是要處理中文顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。

你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標準,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。

因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。

Unicode標準也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode。

新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。

所以,本著節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。

UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續工作。

8 字節碼和機器碼的區別?

機器碼(machine code),學名機器語言指令,有時也被稱為原生碼(Native Code),是電腦的CPU可直接解讀的數據。

通常意義上來理解的話,機器碼就是計算機可以直接執行,并且執行速度最快的代碼。

用機器語言編寫程序,編程人員要首先熟記所用計算機的全部指令代碼和代碼的涵義。手編程序時,程序員得自己處理每條指令和每一數據的存儲分配和輸入輸出,還得記住編程過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作,編寫程序花費的時間往往是實際運行時間的幾十倍或幾百倍。而且,編出的程序全是些0和1的指令代碼,直觀性差,還容易出錯。現在,除了計算機生產廠家的專業人員外,絕大多數的程序員已經不再去學習機器語言了。

機器語言是微處理器理解和使用的,用于控制它的操作二進制代碼。

8086到Pentium的機器語言指令長度可以從1字節到13字節。

盡管機器語言好像是很復雜的,然而它是有規律的。

存在著多至100000種機器語言的指令。這意味著不能把這些種類全部列出來。

總結:機器碼是電腦CPU直接讀取運行的機器指令,運行速度最快,但是非常晦澀難懂,也比較難編寫,一般從業人員接觸不到。

字節碼(Bytecode)是一種包含執行程序、由一序列 op 代碼/數據對 組成的二進制文件。字節碼是一種中間碼,它比機器碼更抽象,需要直譯器轉譯后才能成為機器碼的中間代碼。

通常情況下它是已經經過編譯,但與特定機器碼無關。字節碼通常不像源碼一樣可以讓人閱讀,而是編碼后的數值常量、引用、指令等構成的序列。

字節碼主要為了實現特定軟件運行和軟件環境、與硬件環境無關。字節碼的實現方式是通過編譯器和虛擬機器。編譯器將源碼編譯成字節碼,特定平臺上的虛擬機器將字節碼轉譯為可以直接執行的指令。字節碼的典型應用為Java bytecode。

字節碼在運行時通過JVM(JAVA虛擬機)做一次轉換生成機器指令,因此能夠更好的跨平臺運行。

達內北京Python培訓機構總結:字節碼是一種中間狀態(中間碼)的二進制代碼(文件)。需要直譯器轉譯后才能成為機器碼。

9 三元運算規則以及應用場景?

表達式格式

為真時的結果 if 判定條件 else 為假時的結果

事例

1 if 3>2 else 0

10 用一行代碼實現數值交換:

a =1

b =2

a,b=b,a

print(a,b)

達內Python 0基礎免費訓練營,共4天(可插班學)。全國45個城市200個校區就近試聽,也可在線試聽。

上一篇:Java程序員面試如何規避幾大坑?
下一篇:Python新手,看看這7道基礎面試題你都會嗎?

馬上預約七天免費體驗課

姓名:

電話:

Python面試常見的8個問題及答案總結

Java程序員面試如何規避幾大坑?

IT程序員面試時應該注意哪些問題?

IT程序員想要月薪過萬,面試時應該做好哪些工作?

選擇城市和中心
江西省

貴州省

廣西省

海南省

美女散尿频视频