1. 程式人生 > >拿下這十道Python經典面試題,你離拿到offer不遠了

拿下這十道Python經典面試題,你離拿到offer不遠了

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) # 
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...

[email protected]和@staticmethod

答:@classmethod修飾符對應的函式不需要例項化,不需要self引數,第一個引數需要是表示自身類的cls引數,cls引數可以用來呼叫類的屬性,類的方法,例項化物件等。@staticmethod返回函式的靜態方法,該方法不強制要求傳遞引數,如下宣告一個靜態方法:

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

以上例項聲明瞭靜態方法f,類可以不用例項化就可以呼叫該方法C.f(),也可以例項化後呼叫C().f()。

10.談一談python中的元類

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

相關推薦

拿下Python經典試題offer

1.*args和**kwargs是什麼意思? 答:*args表示可變引數(variadic arguments),它允許你傳入0個或任意個無名引數,這些引數在函式呼叫時自動組裝為一個tuple; **kwargs表示關鍵字引數(keyword arguments),它允許你

熟悉 Redis 高頻試題面試不用愁

1、說說 Redis 都有哪些應用場景? 快取:這應該是 Redis 最主要的功能了,也是大型網站必備機制,合理地使用快取不僅可以加 快資料的訪問速度,而且能夠有效地降低後端資料來源的壓力。 共享Session:對於一些依賴 session 功能的服務來說,如果需要從單機變成叢集的話,可以選擇 redis

緊急整理 20 Spring Boot 試題我經常來面試別人!

面試了一些人,簡歷上都說自己熟悉 Spring Boot, 或者說正在學習 Spring Boot,一問他們時,都只停留在簡單的使用階段,很多東西都不清楚,也讓我對面試者大失所望。 下面,我給大家總結下有哪些 Spring Boot 的面試題,這是我經常拿來問面試者的,希望對你有幫助。

吐血整理 20 Spring Boot 試題我經常來面試別人!

面試了一些人,簡歷上都說自己熟悉 Spring Boot, 或者說正在學習 Spring Boot,一問他們時,都只停留在簡單的使用階段,很多東西都不清楚,也讓我對面試者大失所望。 下面,我給大家總結下有哪些 Spring Boot 的面試題,這是我經常拿來問面試者的,希望對你有幫助。 1、什麼是 Spr

27Redis精選試題會做幾題?

最近面試了幾家公司,都問到了Redis相關問題,當時準備面試時忽略了這方面內容,面試結果就可想而知了。面試回來後,收集了身邊朋友面試時遇到的關於redis的問題,進行了總結,記錄一下以便之後面試有所參考。 1、什麼是Redis?簡述它的優缺點? Redis的全稱是:Remote Dict

Java 程式設計師必須掌握的 8 資料結構試題會幾

瑞士電腦科學家Niklaus Wirth在1976年寫了一本書,名為《演算法+資料結構=程式設計》。 40多年後,這個等式仍被奉為真理。這就是為什麼在面試過程中,需要考察軟體工程師對資料結構的理解。 幾乎所有的問題都需要面試者對資料結構有深刻的理解。無論你是初入職場的

Spring Boot 試題 吐血整理 20 Spring Boot 試題我經常來面試別人!

吐血整理 20 道 Spring Boot 面試題,我經常拿來面試別人!   面試了一些人,簡歷上都說自己熟悉 Spring Boot, 或者說正在學習 Spring Boot,一問他們時,都只停留在簡單的使用階段,很多東西都不清楚,也讓我對面試者大失所望。 下面,我給

阿里Java高階試題阿里巴巴還有多

支付寶筆試面試 1. cookie 和 session 的區別 cookie機制採用的是在客戶端保持狀態的方案, 而session機制採用的是在伺服器端保持狀態的方案。 1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。2、cookie不是很安全,別人可

深入解答11Python基礎試題

傳參 default .get python基礎 說明 默認值 get 根據 none 1. Python的參數傳遞是值傳遞還是引 舉例說明Python函數參數傳遞的幾種形式,並說明函數傳參是值傳遞還是引用傳遞 一、位置參數 調用函數時根據函數定義的參數位置來傳遞參數。

python經典試題

經典面試題 brush pri nbsp 圖片 print self img true 1、方法和函數的區別 from types import MethodType,FunctionType class A: def func(self):pass a = A

110python試題會幾個?

最近公眾號新來了不少朋友,這幾天不少讀者朋友後臺留言問我有沒有python面試題,今天統一給大家分享一遍,希望能幫助準備找工作和仍在找工作的同學,儘快找到工作,該文110道面試題大部分題目屬於鞏固基本python知識點的題目,希望對基本知識不熟悉的同學,能認真做一遍,肯定會有不少收穫。 內

30python真實試題(蒐集到的看看其實都是基礎)

1、一行程式碼實現1-100之間和 In [1]: sum(range(0,101)) Out[1]: 5050 2、如何在一個函式內部修改全域性變數 利用global修改全域性變數 In [2]: a = 10 In [3]: def fn(): ...: global a

[雪峰磁針石部落格]python經典試題:列表和元組有什麼異同?

列表和元組是Python中最常用的兩種資料結構,字典是第三種。 相同點: 都是序列 都可以儲存任何資料型別 可以通過索引訪問 語法差異 使用方括號[]建立列表,而使用括號()建立元組。 請看以下示例: >>> l = ["https://

30python真實試題(附答案)

  最近收集整理了100道python真實面試筆試題,並自己做了一些,希望能幫助大家,順利早日找到工作,限於篇幅問題,本文附有30道面試題計算答案。                學習Python中有

Python 經典試題: a,b兩個序列,大小都為n,序列元素的值任意整形數,無序, 要求: 通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小 使

方法: 用隨機數來求出結果 解題思想: 用隨機數隨機出來所有的程式碼排列可能性,在定義次數的時候 定義的次數越大得到的結果越準確. 最終程式碼: import random #有很多方法是把兩個列表合成一個後排序按照一大一小的分配生成兩個列表 #但是這樣是在資

100Java經典試題及答案解析

作用域public,private,protected,以及不寫時的區別 答:區別如下: 作用域 當前類 同一package 子孫類 其他package public √ √ √ √ protected √ √ √ × friendly √ √ ×

50 CSS 經典試題(包含答案)

1 介紹一下標準的CSS的盒子模型?與低版本IE的盒子模型有什麼不同的?標準盒子模型:寬度=內容的寬度(content)+ border + padding + margin低版本IE盒子模型:寬度=內容寬度(content+border+padding)+ margin2

MyBatis 之 常見的試題

1. #{}和${}的區別是什麼? #{}是預編譯處理,${}是字串替換。 Mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫PreparedStatement的set方法來賦值; Mybatis在處理${}時,就是把${}替換成變數的值。 使用#{}可以有效的防止SQL

Python基礎(81題)試題完了就不用擔心入

1、為什麼學習Python? 人生苦短....哈哈,自己想吧!!! 2、通過什麼途徑學習的Python? 官網、網上視訊、學習網站 有需要Python學習資料的小夥伴嗎?小編整理一套Python資料和PDF,感興趣者可以加小編Python學習群:943752371反正閒著也是閒著呢,

100python真實試題(附答案)

最近收集整理了100道python真實面試筆試題,並自己做了一些,希望能幫助大家,順利早日找到工作,限於篇幅問題,本文附有30道面試題計算答案,另外70道題答案、面試簡歷、如何面試等如有興趣,請新增作者微信好友或者文章底部公眾號並備註(CSDN)免費獲取。 公眾號回覆:面試