1. 程式人生 > >python面試題20道

python面試題20道

20個Python經典面試題,你都知道嗎? 1、Python如何實現單例模式?

Python有兩種方式可以實現單例模式,下面兩個例子使用了不同的方式實現單例模式:

class Singleton(type):def init(cls, name, bases, dict):super(Singleton, cls).init(name, bases, dict)cls.instance = Nonedef call(cls, *args, **kw):if cls.instance is None:cls.instance = super(Singleton, cls).call(*args, **kw)return cls.instanceclass MyClass(object):metaclass

= Singletonprint MyClass()print MyClass() 2. 使用decorator來實現單例模式

def singleton(cls):instances = {}def getinstance():if cls not in instances:instances[cls] = cls()return instances[cls]return [email protected] MyClass:…

2:什麼是lambda函式?

Python允許你定義一種單行的小函式。定義lambda函式的形式如下:labmda 引數:表示式lambda函式預設返回表示式的值。你也可以將其賦值給一個變數。lambda函式可以接受任意個引數,包括可選引數,但是表示式只有一個:

g = lambda x, y: x*y>>> g(3,4)12>>> g = lambda x, y=0, z=0: x+y+z>>> g(1)1>>> g(3, 4, 7)14 也能夠直接使用lambda函式,不把它賦值給變數:

(lambda x,y=0,z=0:x+y+z)(3,5,6)14 如果你的函式非常簡單,只有一個表示式,不包含命令,可以考慮lambda函式。否則,你還是定義函式才對,畢竟函式沒有這麼多限制。

3:Python是如何進行型別轉換的?

Python提供了將變數或值從一種型別轉換成另一種型別的內建函式。int函式能夠將符合數學格式數字型字串轉換成整數。否則,返回錯誤資訊。

int(”34″)34>>> int(”1234ab”) #不能轉換成整數ValueError: invalid literal for int(): 1234ab 函式int也能夠把浮點數轉換成整數,但浮點數的小數部分被截去。

int(34.1234)34>>> int(-2.46)-2 函式°oat將整數和字串轉換成浮點數:

float(”12″)12.0>>> float(”1.111111″)1.111111 函式str將數字轉換成字元:

str(98)‘98′>>> str(”76.765″)‘76.765′ 整數1和浮點數1.0在python中是不同的。雖然它們的值相等的,但卻屬於不同的型別。這兩個數在計算機的儲存形式也是不一樣。

4:Python如何定義一個函式

函式的定義形式如下:

def (arg1, arg2,… argN): 函式的名字也必須以字母開頭,可以包括下劃線“ ”,但不能把Python的關鍵字定義成函式的名字。函式內的語句數量是任意的,每個語句至少有一個空格的縮排,以表示此語句屬於這個函式的。縮排結束的地方,函式自然結束。

下面定義了一個兩個數相加的函式:

def add(p1, p2):print p1, “+”, p2, “=”, p1+p2>>> add(1, 2)1 + 2 = 3 函式的目的是把一些複雜的操作隱藏,來簡化程式的結構,使其容易閱讀。函式在呼叫前,必須先定義。也可以在一個函式內部定義函式,內部函式只有在外部函式呼叫時才能夠被執行。程式呼叫函式時,轉到函式內部執行函式內部的語句,函式執行完畢後,返回到它離開程式的地方,執行程式的下一條語句。

5:Python是如何進行記憶體管理的?

Python的記憶體管理是由Python得直譯器負責的,開發人員可以從記憶體管理事務中解放出來,致力於應用程式的開發,這樣就使得開發的程式錯誤更少,程式更健壯,開發週期更短

6:如何反序的迭代一個序列?

how do I iterate over a sequence in reverse order 如果是一個list, 最快的解決方案是:

list.reverse()try:for x in list:“do something with x”finally:list.reverse() 如果不是list, 最通用但是稍慢的解決方案是:

for i in range(len(sequence)-1, -1, -1):x = sequence[i]

7:Python裡面如何實現tuple和list的轉換?

函式tuple(seq)可以把所有可迭代的(iterable)序列轉換成一個tuple, 元素不變,排序也不變。

例如,tuple([1,2,3])返回(1,2,3), tuple(’abc’)返回(’a’.’b',’c').如果引數已經是一個tuple的話,函式不做任何拷貝而直接返回原來的物件,所以在不確定物件是不是tuple的時候來呼叫tuple()函式也不是很耗費的。

函式list(seq)可以把所有的序列和可迭代的物件轉換成一個list,元素不變,排序也不變。

例如 list([1,2,3])返回(1,2,3), list(’abc’)返回['a', 'b', 'c']。如果引數是一個list, 她會像set[:]一樣做一個拷貝

8:Python面試題:請寫出一段Python程式碼實現刪除一個list裡面的重複元素

可以先把list重新排序,然後從list的最後開始掃描,程式碼如下:

if List:List.sort()last = List[-1]for i in range(len(List)-2, -1, -1):if last==List[i]: del List[i]else: last=List[i]

9:Python檔案操作的面試題

  1. 如何用Python刪除一個檔案?

使用os.remove(filename)或者os.unlink(filename);

  1. Python如何copy一個檔案?

shutil模組有一個copyfile函式可以實現檔案拷貝

10:Python裡面如何生成隨機數?

標準庫random實現了一個隨機數生成器,例項程式碼如下:

import randomrandom.random() 它會返回一個隨機的0和1之間的浮點數

11:如何用Python來發送郵件?

可以使用smtplib標準庫。

以下程式碼可以在支援SMTP監聽器的伺服器上執行。

import sys, smtplibfromaddr = raw_input(”From: “)toaddrs = raw_input(”To: “).split(’,')print “Enter message, end with ^D:”msg = ”while 1:line = sys.stdin.readline()if not line:breakmsg = msg + line# 傳送郵件部分server = smtplib.SMTP(’localhost’)server.sendmail(fromaddr, toaddrs, msg)server.quit()

12:Python裡面如何拷貝一個物件?

一般來說可以使用copy.copy()方法或者copy.deepcopy()方法,幾乎所有的物件都可以被拷貝

一些物件可以更容易的拷貝,Dictionaries有一個copy方法:

newdict = olddict.copy()

13:有沒有一個工具可以幫助查詢python的bug和進行靜態的程式碼分析?

有,PyChecker是一個python程式碼的靜態分析工具,它可以幫助查詢python程式碼的bug, 會對程式碼的複雜度和格式提出警告

Pylint是另外一個工具可以進行coding standard檢查。

14:如何在一個function裡面設定一個全域性的變數?

解決方法是在function的開始插入一個global宣告:

def f()global x 14:有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。

將兩序列合併為一個序列,並排序,為序列Source 拿出最大元素Big,次大的元素Small 在餘下的序列S[:-2]進行平分,得到序列max,min 將Small加到max序列,將Big加大min序列,重新計算新序列和,和大的為max,小的為min。 Python程式碼

def mean( sorted_list ):if not sorted_list:return (([],[]))big = sorted_list[-1]small = sorted_list[-2]big_list, small_list = mean(sorted_list[:-2])big_list.append(small)small_list.append(big)big_list_sum = sum(big_list)small_list_sum = sum(small_list)if big_list_sum > small_list_sum:return ( (big_list, small_list))else:return (( small_list, big_list))tests = [ [1,2,3,4,5,6,700,800],[10001,10000,100,90,50,1],range(1, 11),[12312, 12311, 232, 210, 30, 29, 3, 2, 1, 1]]for l in tests:l.sort()printprint “Source List: ”, ll1,l2 = mean(l)print “Result List: ”, l1, l2print “Distance: ”, abs(sum(l1)-sum(l2))print ‘-*’*40 輸出結果

Source List: [1, 2, 3, 4, 5, 6, 700, 800]Result List: [1, 4, 5, 800] [2, 3, 6, 700]Distance: 99----------------------------------------Source List: [1, 50, 90, 100, 10000, 10001]Result List: [50, 90, 10000] [1, 100, 10001]Distance: 38----------------------------------------Source List: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Result List: [2, 3, 6, 7, 10] [1, 4, 5, 8, 9]Distance: 1----------------------------------------Source List: [1, 1, 2, 3, 29, 30, 210, 232, 12311, 12312]Result List: [1, 3, 29, 232, 12311] [1, 2, 30, 210, 12312]Distance: 21---------------------------------------- 15:用Python匹配HTML tag的時候,<.>和<.?>有什麼區別?

當重複匹配一個正則表示式時候, 例如<.*>, 當程式執行匹配的時候,會返回最大的匹配值

例如:

import res = ‘Title’print(re.match(’<.*>’, s).group()) 會返回一個匹配而不是

import res = ‘Title’print(re.match(’<.*?>’, s).group()) 則會返回

<.>這種匹配稱作貪心匹配 <.?>稱作非貪心匹配

16:Python裡面search()和match()的區別?

match()函式只檢測RE是不是在string的開始位置匹配, search()會掃描整個string查詢匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none

例如:

print(re.match(’super’, ’superstition’).span())會返回(0, 5)

而print(re.match(’super’, ‘insuperable’))則返回None

search()會掃描整個字串並返回第一個成功的匹配

例如:print(re.search(’super’, ’superstition’).span())返回(0, 5)

print(re.search(’super’, ‘insuperable’).span())返回(2, 7)

17:如何用Python來進行查詢和替換一個文字字串?

可以使用sub()方法來進行查詢和替換,sub方法的格式為:sub(replacement, string[, count=0])

replacement是被替換成的文字

string是需要被替換的文字

count是一個可選引數,指最大被替換的數量

例子:

import rep = re.compile(’(blue|white|red)’)print(p.sub(’colour’,'blue socks and red shoes’))print(p.sub(’colour’,'blue socks and red shoes’, count=1)) 輸出:

colour socks and colour shoescolour socks and red shoes subn()方法執行的效果跟sub()一樣,不過它會返回一個二維陣列,包括替換後的新的字串和總共替換的數量

例如:

import rep = re.compile(’(blue|white|red)’)print(p.subn(’colour’,'blue socks and red shoes’))print(p.subn(’colour’,'blue socks and red shoes’, count=1)) 輸出

(’colour socks and colour shoes’, 2)(’colour socks and red shoes’, 1)

18:介紹一下except的用法和作用?

Python的except用來捕獲所有異常, 因為Python裡面的每次錯誤都會丟擲 一個異常,所以每個程式的錯誤都被當作一個執行時錯誤。

一下是使用except的一個例子:

try:foo = opne(”file”) #open被錯寫為opneexcept:sys.exit(”could not open file!”) 因為這個錯誤是由於open被拼寫成opne而造成的,然後被except捕獲,所以debug程式的時候很容易不知道出了什麼問題

下面這個例子更好點:

try:foo = opne(”file”) # 這時候except只捕獲IOErrorexcept IOError:sys.exit(”could not open file”)

19:Python中pass語句的作用是什麼?

pass語句什麼也不做,一般作為佔位符或者建立佔位程式,pass語句不會執行任何操作,比如:

while False:pass pass通常用來建立一個最簡單的類:

class MyEmptyClass:pass pass在軟體設計階段也經常用來作為TODO,提醒實現相應的實現,比如:

def initlog(*args):pass #please implement this

20:介紹一下Python下range()函式的用法?

如果需要迭代一個數字序列的話,可以使用range()函式,range()函式可以生成等差級數。

如例:

for i in range(5)print(i) 這段程式碼將輸出0, 1, 2, 3, 4五個數字

range(10)會產生10個值, 也可以讓range()從另外一個數字開始,或者定義一個不同的增量,甚至是負數增量

range(5, 10)從5到9的五個數字

range(0, 10, 3) 增量為三, 包括0,3,6,9四個數字

range(-10, -100, -30) 增量為-30, 包括-10, -40, -70

可以一起使用range()和len()來迭代一個索引序列

相關推薦

python試題20

20個Python經典面試題,你都知道嗎? 1、Python如何實現單例模式? Python有兩種方式可以實現單例模式,下面兩個例子使用了不同的方式實現單例模式: class Singleton(type):def init(cls, name, bases, dict)

馬上就要找工作了!師哥給了我一百一十Python試題!祝我好運

資料分析系列教程插播一篇面試題教程,最近公眾號新來了不少朋友,這幾天不少粉絲留言說問我有沒有python面試題,其實之前分享過一些面試題,今天統一再給大家分享一遍,也希望能幫助此時仍在找工作的同學,儘快找到工作,該文110道面試題全部來自於大家筆試面試時候拍照後發到群裡求助的題目,並自己一道一道親自

110python試題,你會幾個?

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

交大堂哥給專科的我準備的36Python試題!你會幾題?附答案!

  Q 2:深拷貝和淺拷貝之間的區別是什麼? 答:深拷貝就是將一個物件拷貝到另一個物件中,這意味著如果你對一個物件的拷貝做出改變時,不會影響原物件。在Python中,我們使用函式deepcopy()執行深拷貝,匯入模組copy,如下所示: >>> imp

100python試題

    1、一行程式碼實現1--100之和 利用sum()函式求和 2、如何在一個函式內部修改全域性變數 利用global 修改全域性變數

機緣巧合從華為弄來的40python試題,考的竟然都是基礎知識!

  1.Python所遵循的程式碼規範是什麼? PEP8規範 2.將字串"k:1|k1:2|k2:3|k3:4",處理成Python字典:{‘k’:1, ‘k1’:2, ... } a)答案1     s = "k:1|k1:

51Python試題之1-13

方法 ati 影響 推導式 all 混合繼承 拷貝 的區別 放置 Q.1. Python 的特點和優點是什麽? Python 可以作為編程的入門語言,因為他具備以下特質: 1.解釋性 動態特性 面向對象 語法簡潔 開源 豐富的社區資源 Q.2. 深拷貝和淺拷貝的區別是什

python 試題

pen txt enc num nes int 文本 行數 一個 name = "lzl" def f1(): print(name) def f2(): name = ‘eric‘ f1() f2() (‘hello‘)

python試題(十)

以及 args 空格 代碼實現 spa adding 技術分享 變量作用域 區別 Python中基本數據結構的操作 元組 列表 字典 集合 定義

python試題

計算 sql 是不是 metaclass pool tac rop 協程 connect 描述下最近遇到的python面試題,大家可以參考下 1.構造一個內存泄漏場景 2.用generator生成一個斐波那契數列 3.構造一個可以用with的connection類,conn

python 試題 string int

http pri brush images png .com .cn 面試題 pre str1 = ‘hello‘ str2 = str1 str3 = str1 str4 = str1 str1 = ‘‘ int1 = 1 int2 = int1 int3 = int1

Python 試題整理1

歸並 遞歸函數 color 算術 div microsoft 變量 ldp 路徑 參考網頁:15 Essential Python Interview Questions 1. 什麽是Python?   可以在回答中與其他技術作對比(鼓勵這麽做);如果應聘的是一個Pytho

ASP.NET試題130

pattern blue ner window zed xsl func 窗體 錯誤處理機制 130道ASP.NET面試題 1. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。 答 . private : 私有成員, 在

python試題常考的超市購物車系統

print python面試題 ali ike ren iphone 輸入 car 余額 author = "superman"product_list = [ (‘Iphone‘,5800), (‘Mac Pro‘,9800), (‘Bike‘,800)

一道Python試題:給出d = [True, False, True, False, True],請利用列表d,只用一句話返回列表[0,2,4]

分享 忽略 class pytho 面試題 inf pos 如何 返回   前言:還是我,一個不知死活的小白,冒著生命危險去了一家有逼格的公司面試,去面試的路上就經歷了一番波折,公交車死等不來,最後差點誤了面試時間,這都不算什麽了,雖然對面試不抱什麽希望,但在技術面被虐成了

[Python Study Notes]python試題

並且 好處 變量名 count rip lob pickle amp 占位符 1、什麽是pickling和unpickling?(1分) Pickle模塊接受任何Python對象,並將其轉換為字符串,使用dump函數將其轉儲到文件中,這個過程稱為pickling。

經典Python試題之基礎80問 Python開發

Python開發 Python編程 Python自動化 Python面試 1. 為什麽學習Python?2. 通過什麽途徑學習的Python?3. Python和Java、PHP、C、C#、C++等其他語言的對比?4. 簡述解釋型和編譯型編程語言?5. Python解釋器種類以及特點?6. 位

Python----試題(三)

shutdown 兩種 模擬 lxml list move 道德 shu 通信 1、 post、get有什麽區別? 1. 根據HTTP規範,GET一般用於獲取/查詢資源信息,應該是安全的和冪等。而POST一般用於更新資源信息 2. get是在url中傳遞數據,數據放在

Python試題之數據庫雨緩46問分享

python開發 python編程 python自動化 列舉常見的關系型數據庫和非關系型都有那些? MySQL常見數據庫引擎及比較? 簡述數據三大範式? 什麽是事務?MySQL如何支持事務? 簡述數據庫設計中一對多和多對多的應用場景? 如何基於數據庫實現商城商品計數器? 常見SQL(必備) 簡述觸

Python試題之前端和框架之155問 python開發

python編程 python開發 python自動化 1. 談談你對http協議的認識。2. 談談你對websocket協議的認識。3. 什麽是magic string ?4. 如何創建響應式布局?5. 你曾經使用過哪些前端框架?6. 什麽是ajax請求?並使用jQuery和XMLHttpReq