您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python的面試問答題有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
import os
import sys
import re
import math
import time
import datetime
import random
import threading
import multiprocessing
2. Python 的內建數據類型有哪些?
int、float、complex # 數值型
bool # 布爾型
str # 字符串
list # 列表
tuple # 元組
dict # 字典
3. 簡述 with 方法打開處理文件幫我我們做了什么?
with 語句適用于對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的清理操作,釋放資源,比如文件使用后自動關閉、線程中鎖的自動獲取和釋放等;
with 語句即上下文管理器
,在程序中用來表示代碼執行過程中所處的前后環境。上下文管理器:含有__enter__
和__exit__
方法的對象就是上下文管理器。
enter():在執行 with 語句之前,首先執行該方法,通常返回一個實例對象,如果 with 語句有 as 目標,則將對象賦值給 as 目標。
exit():在執行 with 語句結束后,自動調用__exit__()方法,用戶釋放資源,若此方法返回布爾值 True,程序會忽略異常。
使用環境:文件讀寫、線程鎖的自動釋放等。
with context_expression [as target(s)]:
with-body
這里 context_expression 要返回一個上下文管理器對象,該對象并不賦值給as子句中的 target(s),而是會將上下文管理器的__enter__() 方法的返回值賦值給target(s)。
4. Python 的可變和不可變數據類型?
不可變數據類型:即數據被創建之后,數據的值將不再發生改變,有數值、字符、元祖類型;
可變數據類型:數據別創建之后,數據的值可以發生變化,有列表、字典、集合類型。
5. Python 獲取當前日期?
import datetime
import time
print(time.time()) # 時間戳
print(time.strftime("%Y-%m-%d %H:%M:%S %w", time.localtime())) # 年月日時分秒
print(datetime.datetime.now()) # 年月日時分秒
6. 統計字符串每個單詞出現的次數。
def word_amount(sentence):
split_list = sentence.split()
dict_result = {}
for word_name in split_list:
if word_name not in dict_result.keys():
dict_result[word_name] = 1
else:
dict_result[word_name] += 1
return dict_result
if __name__ == '__main__':
sentence = "I can because i think i can"
dict_result = word_amount(sentence)
print(dict_result)
或者:
if __name__ == '__main__':
sentence = "I can because i think i can"
result = {word: sentence.split().count(word) for word in set(sentence.split())}
print(result)
或者:
from collections import Counter
if __name__ == '__main__':
sentence = "I can because i think i can"
counts = Counter(sentence.split())
print(counts)
7. 用 python 刪除文件和用 linux 命令刪除文件方法。
import os
os.remove("demo.txt")
rm demo.txt
8. 寫一段自定義異常代碼?
class printException(Exception):
pass
def testRaise():
raise printException('printErr')
if __name__ == '__main__':
try:
testRaise()
except printException, e:
print e
9. 舉例說明異常模塊中 try except else finally 的相關意義。
def read_filedata(file_name):
file_obj = ""
try:
# 需要檢測的異常代碼片段
file_obj = open(file_name, "r")
result_data = file_obj.read()
except IOError, e:
# 發生“IOError”異常進行處理的代碼片段
file_obj = "文件不存在:"+ str(e)
else:
# 沒有引發“IOError”異常執行的代碼片段,返回讀取到的數據
return result_data
finally:
# 不管有沒有引發錯誤都會執行的代碼片段,isinstance()用于判斷一個數據類型
if isinstance(file_obj, str):
return file_obj
elif isinstance(file_obj, file):
file_obj.close()
else:
return "未知錯誤,請檢查您的代碼..."
if __name__ == '__main__':
result = read_filedata("abc.txt")
print(result)
10. 遇到 bug 如何處理?
首先查看報錯信息,根據報錯信息找到相應代碼,通常一般的數據結構或者算法錯誤只要找到報錯代碼就可以順利解決;
如果遇到暫時不能解決的錯誤先不要慌,我們可以使用編譯器的 Debug 模式或者自己在代碼中加注斷點進行代碼排查;
如果依然不能解決 bug,我們可以拷貝報錯信息,在搜索引擎中進行搜索。沒有人寫代碼不出 bug,如果你在一個 bug 上耗費時間超過半小時,可以與其他同事探討(注意節制,可能有些費同事);
另辟蹊徑:方法總比困難多,在進行快速開發時,我們應該優先實現功能而不是拘泥于運行效率,所以遇到一些暫時不能解決的 BUG 可以考慮另外的實現方法。
1. 談談對 Python 的了解和其他語言的區別?
Python 是一門語法簡潔優美,功能強大無比,應用領域非常廣泛,具有強大完備的第三方庫的一門強類型
的動態
,可移植,可擴展,可嵌入的解釋型
編程語言。
強類型語言、弱類型語言的區別:
如果語言經常隱式地轉換變量的類型,那這個語言就是弱類型語言
,如果很少會這樣做,那就是強類型語言
。Python 很少會隱式地轉換變量的類型,所以 Python 是強類型的語言。
強類型語言和弱類型原因其判斷的根本是是否會隱式進行語言類型轉變。強類型原因在速度上可能略遜于弱類型語言,但是強類型定義語帶來的嚴謹性又避免了不必要的錯誤。
強類型語言包括:Java、.net、Python、C++ 等語言。其中 Python 是動態語言,是強類型定義語言,是類型安全的語言,Java 是靜態語言,是強類型定義語言,也是類型安全的語言;弱類型語言包括:VB,PHP,JavaScript 等語言。其中 VBScript 是動態語言,是一種類型不安全的原因。
動態語言、靜態語言的區別:
動態類型語言
:動態性語言是指在運行期間才去做數據類型檢查的語言,也就是說動態類型語言編程時,永遠不用給任何變量指定數據類型,該語言會在第一次賦值給變量時,在內部將數據類型記錄下來**。Python 和 Ruby 就是一種典型的動態類型語言,其他的各種腳本語言如 VBScript 也多少屬于動態類型語言。
靜態類型語言
:靜態類型語言與動態類則剛好相反,它的數據類型在編譯期間檢查,也就是說在寫程序時要聲明所有變量的數據類型,C/C++ 是靜態類型語言的典型代表,其他靜態語言還有 C#、Java 等。
對于動態語言與靜態語言的區分,其根本在于數據類型是在運行期間檢查還是在編譯期間檢查。
編譯型語言、解釋型語言的區別:
編譯型語言
:需要將一段程序直接翻譯成機器碼(對于 C/C++ 這種非跨平臺的語言)或者中間碼 (Java 這種跨平臺語言,需要虛擬機再將中間碼印射成機器碼)。一般需經過編譯 (compile)、鏈接 (linker) 這兩個步驟。編譯是把源代碼編譯成機器碼,鏈接是把各個模塊的機器碼和依賴庫串連起來生成可執行文件。
解釋型語言
:使用解釋器將源碼逐行解釋成機器碼并立即執行,不會進行整體性的編譯和鏈接處理,相比編譯型語言省了道工序。
一個像是吃飯等菜都上全了再開動,一個像是吃火鍋,邊涮邊吃,時機不一樣。
解釋型語言的優點:跨平臺容易,只需提供特定平臺的解釋器;缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
2. 簡述解釋型和編譯型編程語言?
可參考上一條的解釋內容。
3. Python 的解釋器種類以及相關特點?
CPython
:官方版本的解釋器。這個解釋器是用C語言開發的,所以叫 CPython。在命令行下運行 python 就是啟動 CPython 解釋器。CPython 是使用最廣的 Python 解釋器。
IPython
:IPython 是基于 CPython 之上的一個交互式解釋器,也就是說,IPython 只是在交互方式上有所增強,但是執行 Python 代碼的功能和 CPython 是完全一樣的。CPython 用>>>作為提示符,而 IPython 用I n [序號]: 作為提示符。
PyPy
:它的目標是執行速度。PyPy 采用J IT 技術,對 Python 代碼進行動態編譯(注意不是解釋),所以可以顯著提高 Python 代碼的執行速度。絕大部分 Python 代碼都可以在 PyPy 下運行,但是 PyPy 和 CPython 有一些是不同的,這就導致相同的 Python 代碼在兩種解釋器下執行可能會有不同的結果。
Jython
:Jython 是運行在 Java 平臺上的 Python 解釋器,可以直接把 Python 代碼編譯成 Java 字節碼執行。
IronPython
:IronPython 和 Jython 類似,只不過 IronPython 是運行在微軟 .Net 平臺上的 Python 解釋器,可以直接把Python 代碼編譯成 .Net 的字節碼。
4. 說說你知道的 Python3 和 Python2 之間的區別?
編碼
:Python2 的默認編碼是 asscii,這也是導致 Python2 中經常遇到編碼問題的原因之一,至于是為什么會使用 asscii 作為默認編碼,原因在于 Python 這門語言誕生的時候還沒出現 Unicode。Python3 默認采用了 UTF-8 作為默認編碼,因此你不再需要在文件頂部寫 # coding=utf-8 了。
字符串
:Python2 中字符的類型,str:已經編碼后的字節序列,unicode:編碼前的文本字符;而 Python3 中字符的類型,str:編碼過的 unicode 文本字符,bytes:編碼前的字節序列。
可以認為字符串有兩種狀態,即文本狀態和字節(二進制)狀態。Python2 和 Python3 中的兩種字符類型都分別對應這兩種狀態,然后相互之間進行編解碼轉化。編碼就是將字符串轉換成字節碼,涉及到字符串的內部表示;解碼就是將字節碼轉換為字符串,將比特位顯示成字符。
在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建議對 str 使用 encode,對 unicode 使用 decode, 這是Python2 設計上的缺陷。Python3 則進行了優化,str 只有一個 encode 方法將字符串轉化為一個字節碼,而且 bytes 也只有一個 decode 方法將字節碼轉化為一個文本字符串。
print
:Python2 中的 print 是語句;Python3 中的 print 是函數。例如:
>>> print("hello", "world")
('hello', 'world')
# py3
>>> print("hello", "world")
hello world
這個例子就比較明顯了,在 py2 中,print 語句后面接的是一個元組對象,而在 py3 中,print 函數可以接收多個位置參數。如果希望在 Python2 中把 print 當函數使用,那么可以導入 future 模塊中的 print_function。
import
:python2 默認是按照相對路徑導入模塊和包,python3 默認則是按照絕對路徑導入。
input
:Python3:input 解析輸入為str字符型;Python2:input 解析輸入為int型,raw_input 解析輸入為 str 類型。
算法符
:在 Python2 中,/ 執行傳統除法,對于整數執行截斷除法,浮點數執行浮點除法(保留小數部分,即使整除);// 執行 Floor 除法,截除掉余數并且針對整數操作數返回一個整數,如果有任何一個操作數是浮點數,則返回一個浮點數。在 Python3 中,/ 總是執行真除法,不管操作數的類型,都會返回包含任何余數的浮點結果;// 執行 Floor 除法,截除掉余數并且針對整數操作數返回一個整數,如果有任何一個操作數是浮點數,則返回一個浮點數。
int/long
:Python3 里,只有一種整數類型 int,大多數情況下,它很像 Python2 里的長整型。Python2 有為非浮點數準備的 int 和 long 類型。int 類型的最大值不能超過 sys.maxint,而且這個最大值是平臺相關的。
True和False
:在 Python2 中,True 和 False 是兩個全局變量(名字),在數值上分別對應 1 和 0,既然是變量,那么它們就可以指向其它對象。Python3 修正了這個缺陷,True 和 False 變為兩個關鍵字,永遠指向兩個固定的對象,不允許再被重新賦值。
迭代器
:在 Python2 中很多返回列表對象的內置函數和方法在 Python3 都改成了返回類似于迭代器的對象,因為迭代器的惰性加載特性使得操作大數據更有效率。
例如:Python2 中使用 xrange() 來創建一個迭代器對象,使用 range() 創建一個 list 數組(要生成很大的數字序列的時候,用 xrange 會比 range 性能優很多,因為不需要一上來就開辟一塊很大的內存空間);Python3 中使用 range() 創建迭代器對象,移除了 xrange() 方法。
另外,字典對象的 dict.keys()、dict.values() 方法都不再返回列表,而是以一個類似迭代器的 view 對象返回。高階函數 map、filter、zip 返回的也都不是列表對象了。Python2 的迭代器必須實現 next 方法,而 Python3 改成了__iter__()、next。
nonlocal
:在 Python2 中可以在函數里面可以用關鍵字 global 聲明某個變量為全局變量,但是在嵌套函數中,想要給一個變量聲明為非局部變量是沒法實現的,在 Pyhon3,新增了關鍵字 nonlcoal,一般使用在閉包中的,使變量使用外層的同名變量。
LEGB
作用域的理解:python3 的 local, global, nonlocal 簡析
以上就是“Python的面試問答題有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。