一、前言
有很多時候,你可能python使用的很熟練,但在面試的時候可能就過不了,
畢竟常說的面試造火箭,入職擰螺絲的情況是真實存在的,所以背八股文也是極其重要的!
這里分享一些常見和高頻的面試題(300道)給大家:
部分目錄如下:

目錄
- 一、前言
- 二、試題分享
- 一. Python基礎
- 二. 企業面試題
- 三. Python高級
- 三、總結
二、試題分享
一. Python基礎
1)字典推導式
d = {key:value for (key,value) in iterable}
2)反轉字串 "aStr"
print("aStr"[::-1])
3)將字串 “k:1 |k1:2|k2:3|k3:4”,處理成字典 {k:1,k1:2,…}
完整試題
公眾號:python磚家
回復:11
str1 = "k:1|k1:2|k2:3|k3:4"
def str2dict(str1):
dict1 = {}
for iterms in str1.split('|'):
key,value = iterms.split(':')
dict1[key] = value
return dict1
#字典推導式
d = {k:int(v) for t in str1.split("|") for k, v in (t.split(":"), )}
<<300道完整試題點我獲取
4)下面代碼的輸出結果將是什么
list = ['a','b','c','d','e']
print(list[10:])
代碼將輸出[],不會產生IndexError錯誤,就像所期望的那樣,嘗試用超出成員的個數的index來獲取某
個串列的成員,例如,嘗試獲取list[10]和之后的成員,會導致IndexError,然而,嘗試獲取串列的切
片,開始的index超過了成員個數不會產生IndexError,而是僅僅回傳一個空串列,這成為特別讓人惡
心的疑難雜癥,因為運行的時候沒有錯誤產生,導致Bug很難被追蹤到,
5)給定兩個串列,怎么找出他們相同的元素和不同的元素
list1 = [1,2,3]
list2 = [3,4,5]
set1 = set(list1)
set2 = set(list2)
print(set1 & set2)
print(set1 ^ set2)
二. 企業面試題
6)python新式類和經典類的區別
- 在python里凡是繼承了object的類,都是新式類
- Python3里只有新式類
- Python2里面繼承object的是新式類,沒有寫父類的是經典類
- 經典類目前在Python里基本沒有應用
- 保持class與type的統一對新式類的實體執行a.class與type(a)的結果是一致的,對于舊式類來說就不一樣了,
- 對于多重繼承的屬性搜索順序不一樣新式類是采用廣度優先搜索,舊式類采用深度優先搜索,
7)python中內置的資料結構有幾種
- 整型 int、 長整型 long、浮點型 float、 復數 complex
- 字串 str、 串列 list、 元祖 tuple
- 字典 dict 、 集合 set
- Python3 中沒有 long,只有無限精度的 int
8)python如何實作單例模式?請寫出兩種實作方式
8.1 第一種方法:使用裝飾器
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Foo(object):
pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True
8.2 第二種方法:使用基類
New 是真正創建實體物件的方法,所以重寫基類的new 方法,以此保證創建物件的時候只生成一個實
例
完整試題
公眾號:python磚家
回復:11
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
class Foo(Singleton):
pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True
三. Python高級
9)Python中類方法、類實體方法、靜態方法有何區別?
類方法: 是類物件的方法,在定義時需要在上方使用 @classmethod 進行裝飾,形參為cls,表示類物件,
類物件和實體物件都可呼叫
類實體方法: 是類實體化物件的方法,只有實體物件可以呼叫,形參為self,指代物件本身;
靜態方法: 是一個任意函式,在其上方使用 @staticmethod 進行裝飾,可以用物件直接呼叫,靜態方法
實際上跟該類沒有太大關系
10)python函式多載機制
函式多載主要是為了解決兩個問題,
- 可變引數型別,
- 可變引數個數,
另外,一個基本的設計原則是,僅僅當兩個函式除了引數型別和引數個數不同以外,其功能是完全相同
的,此時才使用函式多載,如果兩個函式的功能其實不同,那么不應當使用多載,而應當使用一個名字
不同的函式,
好吧,那么對于情況 1 ,函式功能相同,但是引數型別不同,python 如何處理?答案是根本不需要處
理,因為 python 可以接受任何型別的引數,如果函式的功能相同,那么不同的引數型別在 python 中
很可能是相同的代碼,沒有必要做成兩個不同函式,
那么對于情況 2 ,函式功能相同,但引數個數不同,python 如何處理?大家知道,答案就是預設參
數,對那些缺少的引數設定為預設引數即可解決問題,因為你假設函式功能相同,那么那些缺少的引數
終歸是需要用的,
好了,鑒于情況 1 跟 情況 2 都有了解決方案,python 自然就不需要函式多載了,
<<300道完整試題點我獲取
11)對預設引數的理解
預設引數指在呼叫函式的時候沒有傳入引數的情況下,呼叫默認的引數,在呼叫函式的同時賦值時,所
傳入的引數會替代默認引數,
*args是不定長引數,它可以表示輸入引數是不確定的,可以是任意多個,
**kwargs是關鍵字引數,賦值的時候是以鍵值對的方式,引數可以是任意多對在定義函式的時候
不確定會有多少引數會傳入時,就可以使用兩個引數
12)生成器,迭代器的區別
迭代器
是遵循迭代協議的物件,用戶可以使用 iter() 以從任何序列得到迭代器(如 list, tuple,
dictionary, set 等),另一個方法則是創建一個另一種形式的迭代器 —— generator ,要獲取下一個元
素,則使用成員函式 next()(Python 2)或函式 next() function (Python 3) ,當沒有元素時,則引
發 StopIteration 此例外,若要實作自己的迭代器,則只要實作 next()(Python 2)或 next ()
生成器(Generator)
只是在需要回傳資料的時候使用yield陳述句,每次next()被呼叫時,生成器會返
回它脫離的位置(它記憶陳述句最后一次執行的位置和所有的資料值)
區別
生成器能做到迭代器能做的所有事,而且因為自動創建iter()和next()方法,生成器顯得特別簡
潔,而且生成器也是高效的,使用生成器運算式取代串列決議可以同時節省記憶體,除了創建和保存程式
狀態的自動方法,當發生器終結時,還會自動拋出StopIteration例外,
三、總結
大家拿到資料后一定得看啊,不是拿到資料就會了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413915.html
標籤:python
