南昌IT培訓
美國上市IT培訓機構

13732203138

熱門課程

python面試題集錦

  • 時間:2019-06-26 17:06
  • 發布:南昌達內IT培訓
  • 來源:IT咨詢

1.*args和**kwargs是什么意思?

答:*args表示可變參數(variadic arguments),它允許你傳入0個或任意個無名參數,這些參數在函數調用時自動組裝為一個tuple; **kwargs表示關鍵字參數(keyword arguments),它允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。同時使用*args和**kwargs的時候,必須保證*args在**kwargs之前。

2.python里面如何拷貝一個對象?

答:

(1) 賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個;

(2)淺拷貝(copy.copy()),創建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另一個也會被改變);

(3)深拷貝(copy.deepcopy()),創建一個新的對象,并且遞歸的復制它所包含的對象(修改其中一個,另一個不會改變)

注意:并不是所有的對象都可以拷貝

3.簡要描述python的垃圾回收機制

答:python中的垃圾回收是以引用計數為主,標記-清除和分代收集為輔。

引用計數:python在內存中存儲每個對象的引用計數,如果計數變成0,該對象就會消失,分配給該對象的內存就會釋放出來。

標記-清除:一些容器對象,比如說list、dict、tuple、instance等可能會出現引用循環,對于這些循環,垃圾回收器會定時回收這些循環(對象之間通過引用(指針)連在一起,構成一個有向圖,對象構成這個有向圖的節點,而引用關系構成這個有向圖的邊)。

分代收集:python把內存根據對象存活時間劃分為三代,對象創建之后,垃圾回收器會分配它們所屬的代。每個對象都會被分配一個代,而被分配更年輕的代是被優先處理的,因此越晚創建的對象越容易被回收。

4.什么是lambda函數?它有什么好處?

答:lambda表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。

Python允許你定義一種單行的小函數。定義lambda函數的形式如下(lambda參數:表達式)lambda函數默認返回表達式的值。你也可以將其賦值給一個變量。lambda函數可以接受任意個參數,包括可選參數,但是表達式只有一個。

5.python如何實現單例模式?

答:單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個單例而且該單例易于外界訪問,從而方便對實例個數的控制并節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。

__new__()在__init__()之前被調用,用于生成實例對象。利用這個方法和累的屬性的特點可以實現設計模式的單例模式。單例模式是指創建唯一對象,單例模式設計的類只能實例。

1.使用__new__方法

class Singleton(object): def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instance class MyClass(Singleton): a = 1

2.共享屬性

class Borg(object): _state = {} def __new__(cls, *args, **kw): ob = super(Borg, cls).__new__(cls, *args, **kw) ob.__dict__ = cls._state return ob class MyClass2(Borg): a = 1

3.裝飾器版本

def singleton(cls, *args, **kw): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls(*args, **kw) return instances[cls] return getinstance @singleton class MyClass: ...

4.import方法

class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton() # to use from mysingleton import my_singleton my_singleton.foo()

6.python自省

答:自省就是面向對象的語言所寫的程序在運行時,所能知道對象的類型,簡單一句就是運行時能夠獲得對象的類型,比如type(),dir(),getattr(),hasattr(),isinstance().

a = [1,2,3] b = {'a':1,'b':2,'c':3} c = True print type(a),type(b),type(c) # <type 'list'> <type 'dict'> <type 'bool'> print isinstance(a,list) # True

7.談一談python的裝飾器

答:裝飾器本質上是一個python函數,它可以讓其他函數在不作任何變動的情況下增加額外功能,裝飾器的返回值也是一個函數對象。它經常用于有切面需求的場景。比如:插入日志、性能測試,事務處理、緩存、權限驗證等。有了裝飾器我們就可以抽離出大量的與函數功能無關的雷同代碼進行重用。

8.什么是鴨子類型?

答:在鴨子類型中,關注的不是對象的類型本身,而是他如何使用的。例如,在不適用鴨子類型的語言中,我們可以編寫一個函數,它接受一個類型為鴨的對象,并調用它的走和叫方法。在使用鴨子類型的語言中,這樣的一個函數可以接受一個任意類型的對象,并調用它的走和叫方法。

class duck(): def walk(self): print('I am duck,I can walk...') def swim(self): print('I am duck,I can swim...') def call(self): print('I am duck,I can call...') duck1=duck() duck1.walk() # I am duck,I can walk... duck1.call() # I am duck,I can call...

答:@classmethod修飾符對應的函數不需要實例化,不需要self參數,第一個參數需要是表示自身類的cls參數,cls參數可以用來調用類的屬性,類的方法,實例化對象等。@staticmethod返回函數的靜態方法,該方法不強制要求傳遞參數,如下聲明一個靜態方法:

Class C(object): @staticmethod Def f(arg1, arg2,…): …

以上實例聲明了靜態方法f,類可以不用實例化就可以調用該方法C.f(),也可以實例化后調用C().f()。

10.談一談python中的元類

答:一般來說,我們都是在代碼里定義類,用定義的類來創建實例。而使用元類,步驟又是同,定義元類,用元類創建類,再使用創建出來的類來創建實例。元類的主要目的就是為了當創建類時能夠自動地改變類。

預約申請免費試聽課

怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選 !

上一篇:什么樣的面試者更受企業喜歡?
下一篇:面試時分析企業招聘的真實目的

python面試題集錦

什么樣的面試者更受企業喜歡?

it面試經常犯的十大錯誤

20條平面設計面試方法

選擇城市和中心
江西省

貴州省

廣西省

海南省

茄子app