千呼萬喚始出來,咱們需要的面試文檔終于整理出來啦!這一次,小編為大家送上的是python面試題之基礎(chǔ)概念篇。通過對十幾份面試題目的整理,我們選出了其中出現(xiàn)頻率最高的十個題目,附上答案供各位小伙伴參考!
1.*args和**kwargs是什么意思?
答:*args表示可變參數(shù)(variadicarguments),它允許你傳入0個或任意個無名參數(shù),這些參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple; **kwargs表示關(guān)鍵字參數(shù)(keyword arguments),它允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict。同時使用*args和**kwargs的時候,必須保證*args在**kwargs之前。
2.python里面如何拷貝一個對象?
答:
(1) 賦值(=),就是創(chuàng)建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個;
(2)淺拷貝(copy.copy()),創(chuàng)建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另一個也會被改變);
(3)深拷貝(copy.deepcopy()),創(chuàng)建一個新的對象,并且遞歸的復(fù)制它所包含的對象(修改其中一個,另一個不會改變)
注意:并不是所有的對象都可以拷貝
3.簡要描述python的垃圾回收機制
答:python中的垃圾回收是以引用計數(shù)為主,標(biāo)記-清除和分代收集為輔。
引用計數(shù):python在內(nèi)存中存儲每個對象的引用計數(shù),如果計數(shù)變成0,該對象就會消失,分配給該對象的內(nèi)存就會釋放出來。
標(biāo)記-清除:一些容器對象,比如說list、dict、tuple、instance等可能會出現(xiàn)引用循環(huán),對于這些循環(huán),垃圾回收器會定時回收這些循環(huán)(對象之間通過引用(指針)連在一起,構(gòu)成一個有向圖,對象構(gòu)成這個有向圖的節(jié)點,而引用關(guān)系構(gòu)成這個有向圖的邊)。
分代收集:python把內(nèi)存根據(jù)對象存活時間劃分為三代,對象創(chuàng)建之后,垃圾回收器會分配它們所屬的代。每個對象都會被分配一個代,而被分配更年輕的代是被優(yōu)先處理的,因此越晚創(chuàng)建的對象越容易被回收。
4.什么是lambda函數(shù)?它有什么好處?
答:lambda表達式,通常是在需要一個函數(shù),但是又不想費神去命名一個函數(shù)的場合下使用,也就是指匿名函數(shù)。
Python允許你定義一種單行的小函數(shù)。定義lambda函數(shù)的形式如下(lambda參數(shù):表達式)lambda函數(shù)默認返回表達式的值。你也可以將其賦值給一個變量。lambda函數(shù)可以接受任意個參數(shù),包括可選參數(shù),但是表達式只有一個。
5.python如何實現(xiàn)單例模式?
答:單例模式是一種常用的軟件設(shè)計模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個單例而且該單例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個類的對象只能存在一個,單例模式是最好的解決方案。
__new__()在__init__()之前被調(diào)用,用于生成實例對象。利用這個方法和累的屬性的特點可以實現(xiàn)設(shè)計模式的單例模式。單例模式是指創(chuàng)建唯一對象,單例模式設(shè)計的類只能實例。
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._instanceclass 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 obclass 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@singletonclass MyClass: ...
4.import方法
class My_Singleton(object): def foo(self): passmy_singleton = My_Singleton()# to usefrom mysingleton import my_singletonmy_singleton.foo()
6.python自省
答:自省就是面向?qū)ο蟮恼Z言所寫的程序在運行時,所能知道對象的類型,簡單一句就是運行時能夠獲得對象的類型,比如type(),dir(),getattr(),hasattr(),isinstance().
a = [1,2,3]b = {'a':1,'b':2,'c':3}c = Trueprint type(a),type(b),type(c) #
7.談一談python的裝飾器
答:裝飾器本質(zhì)上是一個python函數(shù),它可以讓其他函數(shù)在不作任何變動的情況下增加額外功能,裝飾器的返回值也是一個函數(shù)對象。它經(jīng)常用于有切面需求的場景。比如:插入日志、性能測試,事務(wù)處理、緩存、權(quán)限驗證等。有了裝飾器我們就可以抽離出大量的與函數(shù)功能無關(guān)的雷同代碼進行重用。
8.什么是鴨子類型?
答:在鴨子類型中,關(guān)注的不是對象的類型本身,而是他如何使用的。例如,在不適用鴨子類型的語言中,我們可以編寫一個函數(shù),它接受一個類型為鴨的對象,并調(diào)用它的走和叫方法。在使用鴨子類型的語言中,這樣的一個函數(shù)可以接受一個任意類型的對象,并調(diào)用它的走和叫方法。
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...
9.@classmethod和@staticmethod
答:@classmethod修飾符對應(yīng)的函數(shù)不需要實例化,不需要self參數(shù),第一個參數(shù)需要是表示自身類的cls參數(shù),cls參數(shù)可以用來調(diào)用類的屬性,類的方法,實例化對象等。@staticmethod返回函數(shù)的靜態(tài)方法,該方法不強制要求傳遞參數(shù),如下聲明一個靜態(tài)方法:
Class C(object):
@staticmethod
Def f(arg1, arg2,…):
…
以上實例聲明了靜態(tài)方法f,類可以不用實例化就可以調(diào)用該方法C.f(),也可以實例化后調(diào)用C().f()。
10.談一談python中的元類
答:一般來說,我們都是在代碼里定義類,用定義的類來創(chuàng)建實例。而使用元類,步驟又是同,定義元類,用元類創(chuàng)建類,再使用創(chuàng)建出來的類來創(chuàng)建實例。元類的主要目的就是為了當(dāng)創(chuàng)建類時能夠自動地改變類。
如果你在面試中也曾遇到過一些讓你“眼前一亮”的經(jīng)典題目,或者,那些年你也有關(guān)于面試的難(cao)忘(dan)回憶,歡迎留言討論!
-
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85084 -
Python編程語言
+關(guān)注
關(guān)注
1文章
13瀏覽量
4097
原文標(biāo)題:Python面試攻略(嗨談篇)
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論