1. 程式人生 > 程式設計 >Python工程師必考的6個經典面試題

Python工程師必考的6個經典面試題

第1題:Python裡面如何實現tuple和list的轉換?

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

list轉為tuple:

temp_list=[1,2,3,4,5]

將temp_list進行強制轉換:tuple(temp_list)

確定是否轉換成功:print(type(temp_list))

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

tuple轉為list:

temp_tuple=(1,5)

方法類似,也是進行強制轉換即可:list(temp_tuple)

確定是否轉換成功:print(type(temp_tuple))

第2題:Python裡面search()和match()的區別?

它們兩個都在re模組中

·match()函式是在string的開始位置匹配,如果不匹配,則返回None;

·search()會掃描整個string查詢匹配;

match()

>>>importre
>>>print(re.match('hello','helloworld').span())#開頭匹配到
(0,5)
>>>print(re.match('hello','nicehelloworld').span())#開頭沒有匹配到
Traceback(mostrecentcalllast):
File"<pyshell#2>",line1,in<module>
print(re.match('hello','nicehelloworld').span())
AttributeError:'NoneType'objecthasnoattribute'span'
>>>

search()

>>>print(re.search('a','abc'))
<_sre.SRE_Matchobject;span=(0,1),match='a'>
>>>print(re.search('a','bac').span())
(1,2)
>>>

結論:match() 使用限制更多

第3題: 如何用Python刪除一個檔案?

os模組的使用

os.remove(path)

刪除檔案 path,刪除時候如果path是一個目錄, 丟擲 OSError錯誤。如果要刪除目錄,請使用rmdir()。

remove() 同 unlink() 的功能是一樣的

os.remove('a.txt')
os.removedirs(path)

遞迴地刪除目錄。類似於rmdir(),如果子目錄被成功刪除, removedirs() 將會刪除父目錄;但子目錄沒有成功刪除,將丟擲錯誤。

例如,os.removedirs(“a/b/c”) 將首先刪除c目錄,然後刪除b和a,如果他們是空的話,則子目錄不能成功刪除,將丟擲OSError異常

os.rmdir(path)

刪除目錄 path,要求path必須是個空目錄,否則丟擲OSError錯誤

第4題: is 和 == 的區別?

hon中物件包含的三個基本要素,分別是:id(身份標識)、type(資料型別)和value(值)

id 身份標識,就是在記憶體中的地址

完整的舉例

>>>a='hello'
>>>b='hello'
>>>print(aisb)
True
>>>print(a==b)
True
>>>a='helloworld'
>>>b='helloworld'
>>>print(aisb)
False
>>>print(a==b)
True
>>>a=[1,3]
>>>b=[1,3]
>>>print(aisb)
False
>>>print(a==b)
True
>>>a=[1,3]
>>>b=a
>>>print(aisb)
True
>>>print(a==b)
True
>>>

==是python標準操作符中的比較操作符,用來比較判斷兩個物件的value(值)是否相等

is也被叫做同一性運算子(物件標示符),這個運算子比較判斷的是物件間的唯一身份標識,也就是id(記憶體中的地址)是否相同

我們在檢查 a is b 的時候,其實相當於檢查 id(a) == id(b)。而檢查a == b 的時候,實際是呼叫了物件 a 的 __eq()__ 方法,a == b 相當於 a.__eq__(b)。

這裡還有一個問題,為什麼 a 和 b 都是 “hello” 的時候,a is b 返回True,而 a 和 b都是 “hello world” 的時候,a is b 返回False呢?

這是因為前一種情況下Python的字串駐留機制起了作用。對於較小的字串,為了提高系統性能Python會保留其值的一個副本,當建立新的字串的時候直接指向該副本即可。

所以 “hello” 在記憶體中只有一個副本,a 和 b 的 id 值相同,而 “hello world” 是長字串,不駐留記憶體,Python中各自建立了物件來表示 a 和 b,所以他們的值相同但 id 值不同。

試一下當a=247,b=247時它們的id還是否會相等。事實上Python 為了優化速度,使用了小整數物件池,避免為整數頻繁申請和銷燬記憶體空間。而Python 對小整數的定義是 [-5,257),只有數字在-5到256之間它們的id才會相等,超過了這個範圍就不行了。

>>>a=247
>>>b=247
>>>print(aisb)
True
>>>a=258
>>>b=258
>>>print(aisb)
False
>>>

is 是檢查兩個物件是否指向同一塊記憶體空間,而 == 是檢查他們的值是否相等。is 比 == 更加嚴格。

第5題:a=1,b=2,不用中間變數交換a和b的值?

方法一

>>>a=5
>>>b=6
>>>a=a+b
>>>b=a-b
>>>a=a-b

方法二

>>>a=a^b
>>>b=b^a
>>>a=a^b

方法三

a,b=b,a

第6題:說說你對zen of python的理解,你有什麼辦法看到它?

Python之禪

importthis

試題擴充套件:

語言特性

1.談談對 Python 和其他語言的區別
2.簡述解釋型和編譯型程式語言
3.Python 的直譯器種類以及相關特點?
4.說說你知道的Python3 和 Python2 之間的區別?
5.Python3 和 Python2 中 int 和 long 區別?
6.xrange 和 range 的區別?

編碼規範

7.什麼是 PEP8?
8.瞭解 Python 之禪麼?
9.瞭解 docstring 麼?
10.瞭解型別註解麼?
11.例舉你知道 Python 物件的命名規範,例如方法或者類等
12.Python 中的註釋有幾種?
13.如何優雅的給一個函式加註釋?
14.如何給變數加註釋?
15.Python 程式碼縮排中是否支援 Tab 鍵和空格混用。
16.是否可以在一句 import 中匯入多個庫?
17.在給 Py 檔案命名的時候需要注意什麼?
18.例舉幾個規範 Python 程式碼風格的工具

到此這篇關於Python工程師必考的6個經典面試題的文章就介紹到這了,更多相關6個Python工程師必考的面試題內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!