python面試題

1到底什麼是Python?你能夠在回答中與其餘技術進行對比(瞭解).

答案python

 

下面是一些關鍵點:程序員

 

Python是一種解釋型語言。這就是說,與C語言和C的衍生語言不一樣,Python代碼在運行以前不須要編譯。其餘解釋型語言還包括PHP和Ruby。算法

Python是動態類型語言,指的是你在聲明變量時,不須要說明變量的類型。你能夠直接編寫相似x=111和x="I'm a string"這樣的代碼,程序不會報錯。編程

Python很是適合面向對象的編程(OOP),由於它支持經過組合(composition)與繼承(inheritance)的方式定義類(class)。Python中沒有訪問說明符(access specifier,相似C++中的public和private),這麼設計的依據是「你們都是成年人了」。網絡

Python語言中,函數是第一類對象(first-class objects)。這指的是它們能夠被指定給變量,函數既能返回函數類型,也能夠接受函數做爲輸入。類(class)也是第一類對象。數據結構

Python代碼編寫快,可是運行速度比編譯語言一般要慢。好在Python容許加入基於C語言編寫的擴展,所以咱們可以優化代碼,消除瓶頸,這點一般是能夠實現的。numpy就是一個很好地例子,它的運行速度真的很是快,由於不少算術運算其實並非經過Python實現的。函數

Python用途很是普遍——網絡應用,自動化,科學建模,大數據應用,等等。它也常被用做「膠水語言」,幫助其餘語言和組件改善運行情況。學習

Python讓困難的事情變得容易,所以程序員能夠專一於算法和數據結構的設計,而不用處理底層的細節大數據

 

2 閱讀下面的代碼,寫出A0A1An的最終值。

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))優化

A1 = range(10)

A2 = [i for i in A1 if i in A0]

A3 = [A0[s] for s in A0]

A4 = [i for i in A1 if i in A3]

A5 = {i:i*i for i in A1}

A6 = [[i,i*i] for i in A1]

答案

 

A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}

A1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

A2 = []

A3 = [1, 3, 2, 5, 4]

A4 = [1, 2, 3, 4, 5]

A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

3 這兩個參數是什麼意思:*args**kwargs?咱們爲何要使用它們?

答案

若是咱們不肯定要往函數中傳入多少個參數,或者咱們想往函數中以列表和元組的形式傳參數時,那就使要用*args

 

若是咱們不知道要往函數中傳入多少個關鍵詞參數,或者想傳入字典的值做爲關鍵詞參數時,那就要使用**kwargs。

 

args和kwargs這兩個標識符是約定俗成的用法,你固然還能夠用*bob和**billy,可是這樣就並不太妥。

 

 

4 簡要描述Python的垃圾回收機制(garbage collection)。(重點)

答案

 

這裏能說的不少。你應該提到下面幾個主要的點:

 

Python在內存中存儲了每一個對象的引用計數(reference count)。若是計數值變成0,那麼相應的對象就會小時,分配給該對象的內存就會釋放出來用做他用。

偶爾也會出現引用循環(reference cycle)。垃圾回收器會定時尋找這個循環,並將其回收。舉個例子,假設有兩個對象o1和o2,並且符合o1.x == o2和o2.x == o1這兩個條件。若是o1和o2沒有其餘代碼引用,那麼它們就不該該繼續存在。但它們的引用計數都是1。

Python中使用了某些啓發式算法(heuristics)來加速垃圾回收。例如,越晚建立的對象更有可能被回收。對象被建立以後,垃圾回收器會分配它們所屬的代(generation)。每一個對象都會被分配一個代,而被分配更年輕代的對象是優先被處理的。

 

 

1.什麼是lambda函數?

匿名函數:沒有名字函數就是匿名函數

格式:

lambda [變量名1],[變量名n...] : 表達式

print((lambda x: x ** 3)(2))
print((lambda x,y,z: x + y + z)(1, 2, 3))
print((lambda x,y=10: x * y)(5))

 

好處:

若是函數體涉及的業務邏輯並不複雜(代碼量不大),咱們書寫匿名函數代碼更加簡潔;

節省內存,提升運行效率

弊端:

雖然代碼簡潔了,可是對於整個功能的閱讀性相對變差

不能實現複雜功能的定義,在表達式這部分不能同時定義多個函數的調用執行

什麼時候去定義匿名函數使用:

若是某個功能不會被屢次執行,僅僅是執行不多的次數;

那麼將此功能定義稱爲匿名函數更加的節省內存資源,提升程序的運行效率

 

2. Python裏面search()match()的區別?

match()函數只檢測RE是否是在string的開始位置匹配, search()會掃描整個string查找匹配, 也就是說match()只有在0位置匹配成功的話纔有返回,若是不是開始位置匹配成功的話,match()就返回none

例如:print(re.match(’super’, ’superstition’).span())會返回(0, 5)

print(re.match(’super’, ‘insuperable’))則返回None

search()會掃描整個字符串並返回第一個成功的匹配

例如:print(re.search(’super’, ’superstition’).span())返回(0, 5)

print(re.search(’super’, ‘insuperable’).span())返回(2, 7)

3. 介紹一下except的用法和做用?

Python的except用來捕獲全部異常, 由於Python裏面的每次錯誤都會拋出 一個異常,因此每一個程序的錯誤都被看成一個運行時錯誤。

一下是使用except的一個例子:

try:foo = opne(」file」) #open被錯寫爲opneexcept:sys.exit(」could not open file!」)

由於這個錯誤是因爲open被拼寫成opne而形成的,而後被except捕獲,因此debug程序的時候很容易不知道出了什麼問題

下面這個例子更好點:

try:foo = opne(」file」) # 這時候except只捕獲IOErrorexcept IOError:sys.exit(」could not open file」)

4. 談談__init____str__的做用?

構造函數的做用:
1).建立對象
2).在建立對象的同時爲屬性賦值

注意事項:
1).一個類中若是沒有顯示的定義構造函數,那麼編譯器會默認添加一個空參數的構造函數
2).若是一個類中已經顯示的定義了構造函數,那麼編譯器就不會在默認添加空參構造了
3).函數和函數之間若是名字相同,下面定義的會將上面定義的函數覆蓋掉,反應:python語言沒有函數重載這一說

__str__函數的使用:

因爲建立了對象而且爲對象屬性賦值,可是咱們直接打印對象名在控制檯看到的是對象的完整信息,不理想(不是咱們想要的)
而咱們想要看到的是對象中屬性的內容,因此咱們須要重寫object類中的__str__函數;
在打印對象的時候就會根據咱們本身對於__str__函數體的設計來進行屬性值的回饋

 

5. 將列表生成式中[]改爲() 以後數據結構是否改變?

答案:是,從列表變爲生成器

 

 

 

 

 

1.做爲解釋型語言,Python如何運行?(1分)

Python是一種解釋型語言。Python程序直接從源代碼運行,將程序員編寫的源代碼轉換成中間語言,再將中間語言翻譯成必須執行的機器語言。

2.解釋如何在Unix上建立一個Python腳本可執行文件?(4分)

要在Unix上建立Python腳本可執行文件須要作兩件事情:

Script文件的模式必須是可執行的 

第一行必須以#(#!/ usr / local / bin / python)開頭

3.怎樣才能跨模塊共享全局變量?(3分)

要在單個程序的模塊之間共享全局變量,請建立一個配置模塊。在應用程序的全部模塊中導入配置模塊,該模塊將做爲跨模塊的全局變量提供。

4.解釋如何訪問用C語言編寫的Python模塊?(3分)

你能夠經過下面的方法訪問一個用C寫成的模塊,

Module = = PyImport_ImportModule(「<modulename>」);

 

5.提到使用Python的五個好處?(2分)

  • Python包含了大多數互聯網平臺(如電子郵件,HTML等)的巨大標準庫。
  • Python不須要顯式的內存管理,由於解釋器自己將內存分配給新變量並自動釋放它們
  • 因爲使用方括號而提供易讀性
  • 易於初學者學習
  • 具備內置的數據類型,能夠節省編程時間和工做量,從而聲明變量。

 

7.Python垃圾回收機制(3分)

Python GC主要使用引用計數(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,經過「標記-清除」(mark and sweep)解決容器對象可能產生的循環引用問題,經過「分代回收」(generation collection)

以空間換時間的方法提升垃圾回收效率(我以爲這句話寫的比較好)。

相關文章
相關標籤/搜索