首頁 後端開發 Python教學 (全面)python面試題的經典範例總結

(全面)python面試題的經典範例總結

Feb 23, 2019 am 10:54 AM

(全面)python面試題的經典範例總結

這篇文章帶給大家的內容是關於(全面)python面試題的經典範例總結,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

相關文章推薦:《2020年python面試題總結(最新)

#1、Python如何實現單例模式?  

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

1、

class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args, **kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton
print MyClass()
print MyClass()
登入後複製

使用decorator來實作單一範例模式

def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class 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 <name>(arg1, arg2,… argN):
<statements>
登入後複製

函數的名字也必須以字母開頭,可以包含底線「 」,但不能把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]
<do something with x>
登入後複製

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檔案操作的面試題

如何用Python刪除一個檔案?
使用os.remove(filename)或os.unlink(filename);

Python如何copy一個檔案?
shutil模組有一個copyfile函數可以實現檔案拷貝

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

標準函式庫random實作了一個隨機數產生器,實例程式碼如下:

import random
random.random()
登入後複製

它會傳回一個隨機的0和1之間的浮點數

11:如何用Python来发送邮件?

可以使用smtplib标准库。
以下代码可以在支持SMTP监听器的服务器上执行。

import sys, smtplib
fromaddr = raw_input(”From: “)
toaddrs = raw_input(”To: “).split(’,&#39;)
print “Enter message, end with ^D:”
msg = ”
while 1:
line = sys.stdin.readline()
if not line:
break
msg = 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
登入後複製

15:用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

当重复匹配一个正则表达式时候, 例如<.*>, 当程序执行匹配的时候,会返回最大的匹配值

例如:

import re
s = ‘<html><head><title>Title</title>’
print(re.match(’<.*>’, s).group())
登入後複製

会返回一个匹配而不是

import re
s = ‘<html><head><title>Title</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 re
p = re.compile(’(blue|white|red)’)
print(p.sub(’colour’,&#39;blue socks and red shoes’))
print(p.sub(’colour’,&#39;blue socks and red shoes’, count=1))
登入後複製

输出:

colour socks and colour shoes
colour socks and red shoes
登入後複製

subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量
例如:

import re
p = re.compile(’(blue|white|red)’)
print(p.subn(’colour’,&#39;blue socks and red shoes’))
print(p.subn(’colour’,&#39;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被错写为opne
except:
sys.exit(”could not open file!”)
登入後複製

因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题
下面这个例子更好点:

try:
foo = opne(”file”) # 这时候except只捕获IOError
except 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()来迭代一个索引序列
例如:

a = [&#39;Nina&#39;, &#39;Jim&#39;, &#39;Rainman&#39;, &#39;Hello&#39;]
for i in range(len(a)):
    print(i, a[i])
登入後複製

21:有两个序列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()
print
print “Source List:    ”, l
l1,l2 = mean(l)
print “Result List:    ”, l1, l2
print “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
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
登入後複製

相关学习推荐:python视频教程

以上是(全面)python面試題的經典範例總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

什麼是正則表達式? 什麼是正則表達式? Mar 20, 2025 pm 06:25 PM

正則表達式是在編程中進行模式匹配和文本操作的強大工具,從而提高了各種應用程序的文本處理效率。

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

哪些流行的Python庫及其用途? 哪些流行的Python庫及其用途? Mar 21, 2025 pm 06:46 PM

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

Python中如何通過字符串動態創建對象並調用其方法? Python中如何通過字符串動態創建對象並調用其方法? Apr 01, 2025 pm 11:18 PM

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...

See all articles