1. 程式人生 > >[Python Study Notes]python面試題

[Python Study Notes]python面試題

並且 好處 變量名 count rip lob pickle amp 占位符

1、什麽是pickling和unpickling?(1分)

Pickle模塊接受任何Python對象,並將其轉換為字符串,使用dump函數將其轉儲到文件中,這個過程稱為pickling。從存儲的字符串表示中檢索原始Python對象的過程稱為unpickling。

2、作為解釋型語言,Python如何運行?(1分)

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

3、有哪些工具可以幫助查找錯誤或執行靜態分析?(2分)

PyChecker是一個靜態分析工具,用於檢測Python源代碼中的錯誤,並給出錯誤的類型和復雜性。Pylint是驗證模塊是否符合編碼標準的另一種工具。

4、按下述要求編寫代碼,實現以下功能:(5分)

(1)編寫代碼下載https://en.wikipedia.org/wiki/Machine_translation 頁面的內容並保存為mt.html

(2)統計mt.html中<p>標簽下所有單詞並存儲到mt_word.txt中,要求:

a) 每個單詞一行。單詞在前,單詞出現的次數在後,中間用Tab()分隔。

b) 單詞按照數目從多到少排列。比如說單詞a出現了100次,單詞b出現了10次,則單詞a要在單詞b前面。

技術分享圖片

5、下面的代碼會輸出什麽:(2分)

def f(x,l=[]):

    for i in range(x):

        l.append(i*i)

    print l

    f(2)f(3,[3,2,1])f(3)

答案:

[0, 1][3, 2, 1, 0, 1, 4][0, 1, 0, 1, 4]

6、閱讀下面的代碼,它的輸出結果是什麽?(6分)

class Node(object):
    def __init__(self,sName):
        self._lChildren = []
        self.sName = sName
    def __repr__(self):
        return "<Node ‘{}‘>".format(self.sName) 
    def append(self,*args,**kwargs):
        self._lChildren.append(*args,**kwargs)
    def print_all_1(self):
        print self
    for oChild in self._lChildren:
        oChild.print_all_1()
    def print_all_2(self):
    def gen(o):
        lAll = [o,]
        while lAll:
            oNext = lAll.pop(0)
            lAll.extend(oNext._lChildren)
            yield oNext
            for oNode in gen(self):
                print oNode
                oRoot = Node("root")
                oChild1 = Node("child1")
                oChild2 = Node("child2")
                oChild3 = Node("child3")
                oChild4 = Node("child4")
                oChild5 = Node("child5")
                oChild6 = Node("child6")
                oChild7 = Node("child7")
                oChild8 = Node("child8")
                oChild9 = Node("child9")
                oChild10 = Node("child10")
                oRoot.append(oChild1)
                oRoot.append(oChild2)
                oRoot.append(oChild3)
                oChild1.append(oChild4)
                oChild1.append(oChild5)
                oChild2.append(oChild6)
                oChild4.append(oChild7)
                oChild3.append(oChild8)
                oChild3.append(oChild9)
                oChild6.append(oChild10)

                # 說明下面代碼的輸出結果
                oRoot.print_all_1()
                oRoot.print_all_2()

答案

技術分享圖片技術分享圖片

7、Python中lambda是什麽意思?(1分)

它是一個經常用作內聯函數的單個表達式匿名函數。

8、為什麽python中的lambda表單沒有語句?(1分)

python中的lambda表單沒有語句,因為它用於創建新的函數對象,然後在運行時返回它們。

9、Python中的pass是什麽意思?(1分)

pass意味著沒有任何操作的Python語句,換句話說,它是復合語句中的一個占位符,如果一個地方沒有什麽必須寫在那裏,就需要用上pass了。

10、閱讀下面的代碼,寫出A0,A1至An的最終值。(5分)

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]

技術分享圖片技術分享圖片

11、什麽是Python的單元測試?(1分)

Python中的單元測試框架被稱為unittest。它支持共享設置,自動化測試,測試關機代碼,測試集合等。

12、在Python中unittest是什麽?(1分)

從列表,元組,字符串等序列類型中選擇一系列項目的機制被稱為unittest。

13、什麽是Python中的生成器?(1分)

實現叠代器的方式被稱為生成器。除了在函數中產生表達式之外,它是一個正常的函數。

14、__new__和__init__的區別(4分)

技術分享圖片技術分享圖片

15、如何復制Python中的對象?(2分)

要在Python中復制對象,一般情況下可以嘗試copy.copy()或copy.deepcopy()。不能復制所有的對象,但大多數還是可以的。

16、如何將數字轉換為字符串?(2分)

為了將數字轉換為字符串,使用內置函數str()。如果想要一個八進制或十六進制表示,使用內置函數oct()或 hex()。

17、Xrange和range有什麽區別?(2分)

Xrange返回一個xrange對象,而range返回一個數組。不管範圍多大,使用同樣的內存。

18、什麽是Python中的模塊和包?(3分)

在Python中,模塊是構造程序的方式。每個Python程序文件都是一個模塊,它導入其他模塊,如對象和屬性。

Python程序的文件夾是一個模塊包,包可以有模塊或子文件夾。

19、提到Python中的局部和全局變量的規則是什麽?(3分)

局部變量:如果一個變量在函數體內的任何地方被分配了一個新的值,它被認為是本地的。

全局變量:使用global定義的變量就是全局變量

當局部變量名字和全局變量名字重復時,局部變量會覆蓋掉全局變量。

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

要在單個程序的模塊之間共享全局變量,請創建一個配置模塊。在應用程序的所有模塊中導入配置模塊,該模塊將作為跨模塊的全局變量提供。

21、解釋如何在Unix上創建一個Python腳本可執行文件?(4分)

要在Unix上創建Python腳本可執行文件需要做兩件事情:

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

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

22、Python垃圾回收機制(3分)

Python GC主要使用引用計數(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,通過“標記-清除”(mark and sweep)解決容器對象可能產生的循環引用問題,通過“分代回收”(generation collection)以空間換時間的方法提高垃圾回收效率。

23、解釋如何在Python中生成隨機數字?(3分)

要在Python中生成隨機數需要將命令導入

隨機導入:random.random()

這將返回範圍[0,1)中的隨機浮點數

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

你可以通過下面的方法訪問一個用C寫成的模塊,

Module = = PyImport_ImportModule(“<modulename>”);

25、在Python中如何使用//運算符?(1分)

它是一個Floor Division Operator,用於將兩個操作數相除,結果為小數點前面的數字。例如,10 // 5 = 2和10.0 // 5.0 = 2.0。

26、提到使用Python的五個好處?(2分)

·Python包含了大多數互聯網平臺(如電子郵件,HTML等)的巨大標準庫。

·Python不需要顯式的內存管理,因為解釋器本身將內存分配給新變量並自動釋放它們

·由於使用方括號而提供易讀性

·易於初學者學習

·具有內置的數據類型,可以節省編程時間和工作量,從而聲明變量。

27、簡單說明在Python中如何使用split函數?(1分)

在Python中使用split函數是使用定義的分隔符將字符串分解成更短的字符串。它給出了字符串中所有單詞的列表。

28、解釋什麽是Flask及其好處?(2分)

Flask是一個基於“Werkzeug,Jinja 2和良好意圖”BSD許可的web微型框架,Werkzeug和jingja是它的兩個依賴項。

Flask是微觀框架的一部分。這意味著它將很少或不依賴於外部庫,它使框架輕而易舉,更新和安全漏洞更少。

29、Django,Pyramid和Flask有什麽區別?(3分)

Flask是一個“微框架”,主要用於需求更簡單的小型應用程序。在Flask中,你必須使用外部庫。

Pyramid是為更大的應用程序建立的。它提供了靈活性,並讓開發人員為他們的項目使用正確的工具。開發人員可以選擇數據庫,URL結構,模板樣式等等。

Pyramid可重新配置。像Pyramid一樣,Django也可以用於更大的應用程序。 它包括一個ORM。

30、Flask-WTF是什麽,有什麽特點?(3分)

Flask-WTF提供了與WTForms的簡單集成,功能包括:

·與wtforms集成

·使用csrf令牌安全形式

·全球csrf保護

·Reptcha支持

·與Flask Uploads一起使用的文件上傳

31、Flask腳本的常用方式是什麽?(1分)

應該是應用程序的導入路徑或Python文件的路徑

32、如何在Flask中訪問會話?(2分)

一個會話基本上允許記住從一個請求到另一個請求的信息。在Flask中,它使用簽名的cookie,以便用戶可以查看會話內容並進行修改。用戶可以修改會話,只要它有密鑰Flask.secret_key。

33、Flask是一個MVC模型嗎?如果是,可以示例一下嗎?(5分)

基本上,Flask是一個簡單的框架,其行為與MVC框架相同。所以MVC是Flask的完美選擇,示例參考如下:

技術分享圖片

34、解釋Python Flask中的數據庫連接?(5分)

Flask支持數據庫驅動的應用程序(RDBS)。這樣的系統需要創建一個模式,將shema.sql文件傳送到sqlite3命令。所以需要sqlite3命令才能在Flask中創建或啟動數據庫。

Flask允許以三種方式請求數據庫

·before_request():它們在請求前被調用並且不傳遞任何參數

·after_request():它們在請求之後被調用並且傳遞將被發送到客戶端響應

·teardown_request():在引發異常的情況下調用,並且不保證響應。他們在響應結束後被調用。他們不允許修改請求,他們的值被忽略。

35、你有多個運行Python的Memcache服務器,其中一個memcacher服務器失敗,它有你的數據,它會試圖從那個失敗的服務器獲取關鍵數據嗎?(5分)

發生故障的服務器中的數據不會被刪除,但是可以為多個節點配置自動故障規定。可以在任何類型的套接字或Memcached服務器級錯誤期間觸發故障切換,而不會在正常的客戶端錯誤(如添加現有密鑰等)期間觸發。

36、解釋如何最大限度地減少Python開發中的Memcached服務器中斷?(5分)

當一個實例失敗,這將在客戶端發出請求時重新加載丟失的數據,在數據庫服務器上承受更大的負載。為了避免這種情況,如果代碼已經寫入,盡量減少緩存的沖擊,那麽它將產生最小的影響

另一種方法是使用丟失的機器IP地址在新機器上啟動Memcached實例

代碼是最大限度減少服務器停機的另一種方法,因為它可以自由地以最少的工作更改Memcached服務器列表

設置超時值是一些Memcached客戶端為Memcached服務器中斷實現的另一個選項。當Memcached服務器關閉時,客戶端將不斷嘗試發送請求,直到達到超時限制

37、解釋Python項目中應不應該使用Memcached?(5分)

Memcached常見的誤用是將其用作數據存儲,而不是用作緩存

切勿使用Memcached作為運行應用程序所需信息的唯一來源,數據應該始終可以通過其他來源獲得

Memcached只是一個鍵或值存儲,不能對數據執行查詢或遍歷內容以提取信息

Memcached在加密或認證時不提供任何形式的安全性

[Python Study Notes]python面試題