當前位置: 首頁>>技術教程>>正文


Python麵試經典問題50問及答案

Python麵試問題和答案

基本的Python麵試問題

Q1。列表和元組有什麽區別?

列表與TUPLES

LIST TUPLES
列表是可變的,即可以編輯。 元組是不可變的(元組是無法編輯的列表)。
列表比元組慢。 元組比列表更快。
語法:list_1 = [10,’Chelsea’,20] 語法:tup_1 =(10,’Chelsea’,20)

Q2。 Python的主要特點是什麽?

  • Python是一個解釋型語言。這意味著,與C語言及其變體不同,Python在運行之前不需要編譯。其他解釋語言包括PHP Ruby 
  • Python是動態類型,這意味著當您聲明變量時,您不需要聲明變量的類型。你可以做的事情x=111, 接著x="I'm a string",這沒毛病。
  • Python非常適合麵向對象的編程因為它允許類的定義以及組合和繼承。 Python沒有訪問說明符(比如C++的publicprivate),這一點的理由是“我們都是成年人”。
  • 在Python中,函數first-class對象。這意味著它們可以分配給變量,從其他函數返回並傳遞給函數。類也是first-class對象。
  • 編寫Python代碼很快但運行它通常比編譯語言慢。幸運的是,Python允許包含基於C的擴展,因此瓶頸可以被優化掉並且經常被優化。numpy包就是一個很好的例子,它真的非常快,因為很多數字運算它實際上並不是由Python完成的。
  • Python在許多領域中被使用 – 例如:Web應用程序,自動化,科學建模,大數據應用程序等等。它也經常被用作膠水“glue”代碼,以使其他語言和組件發揮得很好。

Q3。深拷貝和淺拷貝有什麽區別?

答: 淺拷貝在創建新實例類型時會用到,並保留在新實例中複製的值。淺拷貝用於複製引用指針,就像複製值一樣。這些引用指向原始對象,並且在類的任何成員中所做的更改也將影響它的原始副本。淺拷貝允許更快地執行程序,它取決於所使用的數據的大小。

深拷貝用於存儲已複製的值。深層複製不會將引用指針複製到對象。它引用一個對象,並存儲一些其他對象指向的新對象。原始副本中所做的更改不會影響使用該對象的任何其他副本。由於為每個被調用的對象創建了某些副本,因此深層複製會使程序的執行速度變慢。

Q4。如何在Python中實現多線程?

答:

  1. Python有一個multi-threading包,但是如果你想讓multi-thread加速你的代碼,那麽使用它通常不是一個好主意。
  2. Python有一個名為Global Interpreter Lock(GIL)的結構。 GIL確保隻有一個“線程”可以在任何時候執行。一個線程獲取GIL,做一點工作,然後將GIL傳遞到下一個線程。
  3. 這種情況很快發生,因此對於人眼看來,您的線程似乎並行執行,但它們實際上隻是輪流使用相同的CPU核心。
  4. 所有這些GIL傳遞都增加了執行的開銷。這意味著如果您想讓代碼運行得更快,那麽使用線程包通常不是一個好主意。

Q5。如何在python中使用三元運算符?

答: 三元運算符是用於顯示條件語句的運算符。這包含用於評估為true或false值的語句。

句法:

三元操作符語法如下,
[on_true] if [expression] else [on_false]

例:

x,y = 25,50

big = x if x < y else y

如果x <y為真,則返回值為big = x,如果不正確則返回big = y作為結果。

 

Q6。如何在Python中管理內存?

答:

  1. python中的內存管理由Python私有堆空間。所有Python對象和數據結構都位於私有堆中。程序員無權訪問此私有堆。 python解釋器負責處理這個問題。
  2. Python對象的堆空間分配由Python的內存管理器完成。核心API提供了一些程序員編寫代碼的工具。
  3. Python還有一個內置的垃圾收集器,它可以回收所有未使用的內存,並使其可用於堆空間。

Q7。用一個例子解釋Python中的繼承。

答: 繼承允許一個類獲得另一個類的所有成員(比如屬性和方法)。繼承提供代碼可重用性,使創建和維護應用程序變得更容易。我們繼承的類稱為super-class,繼承的類稱為派生/子類。

以下是Python支持的不同類型的繼承:

  1. 單一繼承 – 派生類獲取單個超類的成員。
  2. Multi-level繼承 – 從基類base1繼承的派生類d1,d2繼承自base2。
  3. 分層繼承 – 從一個基類可以繼承任意數量的子類
  4. 多重繼承 – 派生類從多個基類繼承。

Q8。解釋Flask是什麽及其好處?

答: Flask是基於“Werkzeug,Jinja2和良好意圖”BSD許可證的Python網絡微框架。 Werkzeug和Jinja2是它的兩個依賴項。這意味著它對外部庫幾乎沒有依賴性。它使框架變得輕盈,隻是少量依賴於更新和更少的安全性錯誤。

會話基本上允許您記住從一個請求到另一個請求的信息。在flask中,會話使用簽名的cookie,以便用戶可以查看會話內容並進行修改。當且僅當有密鑰Flask.secret_key,用戶可以修改會話。

Q9。 Python中 help()和 dir()函數的用途是什麽?

答: Help()和 dir()這兩個函數都可以從Python解釋器訪問,並用於查看內置函數的合並轉儲。

  1. Help()函數: help()函數用於顯示文檔字符串,還可以幫助您查看與模塊,關鍵字,屬性等相關的幫助。
  2. Dir()函數: dir()函數用於顯示定義的符號。

Q10。每當Python退出時,為什麽不是所有的內存都是de-allocated?

答:

  1. 每當Python退出時,特別是那些對其他對象具有循環引用的Python模塊或從全局命名空間引用的對象並不總是de-allocated或被釋放。
  2. 不能de-allocate由C庫保留的那些內存部分。
  3. 退出時,由於擁有自己的高效清理機製,Python會嘗試de-allocate /銷毀其他所有對象。

Q11。 Python中的字典是什麽?

答: Python中的內置數據類型稱為字典。它定義了鍵和值之間的one-to-one關係。字典包含一對鍵及其對應的值。字典由鍵來索引。

我們來舉個例子:

以下示例包含一些鍵,Country, Capital & PM,它們的相應值分別是印度,德裏和莫迪。

dict={'Country':'India','Capital':'Delhi','PM':'Modi'}
print dict[Country]
India
print dict[Capital]
Delhi
print dict[PM]
Modi

Q12。什麽是Python monkey補丁?

答: 在Python中,術語monkey補丁僅指run-time上的類或模塊的動態修改。

考慮以下示例:

# m.py
class MyClass:
def f(self):
print "f()"

然後我們可以像這樣運行monkey-patch測試:

import m
def monkey_f(self):
print "monkey_f()"

m.MyClass.f = monkey_f
obj = m.MyClass()
obj.f()

輸出如下:

monkey_f()

我們可以看到,在模塊之外,我們確實對函數f()的行為做了一些改變,實際執行的是函數monkey_f(),。

Q13。這是什麽意思: *args**kwargs?我們為什麽要用呢?

答: 我們用*args當我們不確定將多少個參數傳遞給函數時,或者我們是否要將存儲的列表或參數元組傳遞給函數時。**kwargs當我們不知道將多少關鍵字參數傳遞給函數時,或者它可以用於將字典的值作為關鍵字參數傳遞時使用。標識符argskwargs是一個約定,你也可以使用*bob**billy,但這不是明智之舉。

Q14。寫一個one-liner,它將計算文件中的大寫字母數。即使文件太大而無法放入內存,您的代碼也應該可以正常工作。

答:  我們先寫一個多行解決方案,然後將其轉換為一個班輪代碼。

with open(SOME_LARGE_FILE) as fh:
count = 0
text = fh.read()
for character in text:
    if character.isupper():
         count += 1

我們現在嘗試將其轉換為單行。

count sum(1 for line in fh for character in line if character.isupper())

Q15。什麽是負指數,為什麽使用它們?

答: Python中的序列是索引的,它由正數和負數組成。正的數字使用’0’作為第一個索引,’1’作為第二個索引,以此類推。

負數的索引從’-1’開始,表示序列中的最後一個索引,’ – 2’作為倒數第二個索引,依次類推。

 

Q16。如何在Python中隨機化列表中的項目?

答: 考慮下麵顯示的示例:

from random import shuffle
x = ['Keep', 'The', 'Blue', 'Flag', 'Flying', 'High']
shuffle(x)
print(x)

以下代碼的輸出如下。

['Flying', 'Keep', 'Blue', 'High', 'The', 'Flag']

Q17。在python中編譯和鏈接的過程是什麽?

答: 編譯和鏈接允許正確編譯新擴展而不會出現任何錯誤,並且隻有在通過編譯過程時才能進行鏈接。如果使用動態加載,則它取決於係統提供的樣式。 python解釋器可用於提供配置設置文件的動態加載,並將重建解釋器。

這需要的步驟如下:

  1. 使用任何名稱以及係統編譯器支持的任何語言創建文件。例如file.c或file.cpp
  2. 將此文件放在正在使用的發行版的Modules /目錄中。
  3. 在Modules /目錄中存在的Setup.local文件中添加一行。
  4. 使用spam file.o運行該文件
  5. 成功運行此重建解釋程序後,在top-level目錄中使用make命令。
  6. 如果文件已更改,則使用命令“make Makefile”運行rebuildMakefile。

Q18。在Python中為數值數據集編寫排序算法。

答: 以下代碼可用於在Python中對列表進行排序:

list = ["1", "4", "0", "6", "9"]
list = [int(i) for i in list]
list.sort()
print (list)

Q19。查看下麵的代碼,記下A0,A1,…的最終值。

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
A1 = range(10) A2 = sorted([i for i in A1 if i in A0])
A3 = sorted([A0[s] for s in A0])
A4 = [i for i in A1 if i in A3]
A5 = {i:i*i for i in A1}
A6 = [[i,i*i] for i in A1]
print(A0,A1,A2,A3,A4,A5,A6)

答: 以下是A0,A1,…… A6的最終輸出

A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} # the order may vary
A1 = range(0, 10) 
A2 = []
A3 = [1, 2, 3, 4, 5]
A4 = [1, 2, 3, 4, 5]
A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

Q20。Python解釋“re”模塊的 split(), sub(), subn()方法。

答: 要修改字符串,Python的“re”模塊提供了3種方法。他們是:

  • split() – 使用正則表達式將“split”給定字符串放入列表中。
  • sub() – 查找正則表達式模式匹配的所有子字符串,然後用不同的字符串替換它們
  • subn() – 它類似於 sub(),並且還返回新字符串和替換的序號。

Q21。如何在Python中生成隨機數?

答: 隨機模塊是用於生成隨機數的標準模塊。該方法定義為:

import random
random.random

語句random.random()方法返回[0,1]範圍內的浮點數。該函數生成隨機浮點數。隨機類使用的方法是隱藏實例的綁定方法。可以使用Random的實例來顯示創建不同單個線程實例的multi-threading程序。其中使用的其他隨機生成器是:

  1. randrange(a,b):它選擇一個整數並定義範圍in-between [a,b)。它通過從指定範圍中隨機選擇元素來返回元素。它不構建範圍對象。
  2. uniform(a,b):它選擇一個在[a,b)範圍內定義的浮點數.Iyt返回浮點數
  3. normalvariate(mean,sdev):用於正態分布,其中mu是平均值,sdev是用於標準偏差的sigma。
  4. 使用和實例化的Random類創建一個獨立的多個隨機數生成器。

Q22。range和xrange之間有什麽區別?

答: 在大多數情況下,xrange和range在功能方麵完全相同,它們都提供了一種生成整數列表供您使用的方法。唯一的區別是range返回一個Python列表對象,x range返回一個xrange對象。

這意味著xrange實際上並不像run-time那樣生成靜態列表。它使用稱為yielding的特殊技術根據需要創建值。該技術與一種稱為生成器的對象一起使用。這意味著,如果你有一個非常巨大的範圍,你想生成一個列表,比如10億,xrange就是要使用的功能。

如果你有一個真正的內存敏感係統,例如你正在使用的手機,尤其如此,因為range將使用盡可能多的內存來創建整數數組,這可能導致內存錯誤並導致崩潰程序。

Q23。什麽是pickling and unpickling

答: Pickle模塊接受任何Python對象並將其轉換為字符串表示形式,並使用dump函數將其轉儲到文件中,此過程稱為pickling。從存儲的字符串表示中檢索原始Python對象的過程稱為unpickling。

Django – Python訪談問題

Q24。Django,Pyramid和Flask之間的差異。

答:

  • Flask是“microframework”,主要用於具有更簡單要求的小型應用程序。在Flask中,您必須使用外部庫。
  • Pyramid適用於大型應用程序。它提供了靈活性,並允許開發人員為他們的項目使用正確的工具。開發人員可以選擇數據庫,URL結構,模板樣式等。
  • Django也可以像Pyramid一樣用於更大的應用程序。

Q25。討論Django架構。

答: Django MVT模式:

Django Architecture - Python Interview Questions - Edureka數字:  Python訪談問題 – Django架構

開發人員提供模型,視圖和模板,然後將其映射到URL,Django可以為用戶提供服務。

Q26。解釋如何在Django中設置數據庫。

答: 您可以使用命令edit mysite /setting.py,它是一個普通的python模塊,模塊級別代表Django設置。

Django默認使用SQLite;對於Django用戶來說這很容易,因此不需要任何其他類型的安裝。如果您的數據庫選擇不同,則必須使用DATABASE’default’項中的以下鍵來匹配您的數據庫連接設置。

  • 引擎:您可以使用’django.db.backends.sqlite3’,’django.db.backeneds.mysql’,’django.db.backends.postgresql_psycopg2’,’django.db.backends.oracle’等來更改數據庫
  • 名稱:數據庫的名稱。如果您使用SQLite作為數據庫,那麽數據庫將是您計算機上的文件,Name應該是完整的絕對路徑,包括該文件的文件名。
  • 如果您沒有選擇SQLite作為數據庫,則必須添加密碼,主機,用戶等設置。

Django使用SQLite作為默認數據庫,它將數據作為單個文件存儲在文件係統中。如果你有數據庫服務器-PostgreSQL,MySQL,Oracle,MSSQL-並且想要使用它而不是SQLite,那麽使用數據庫的管理工具為你的Django項目創建一個新的數據庫。無論哪種方式,在您的(空)數據庫到位的情況下,剩下的就是告訴Django如何使用它。這是項目的settings.py文件的來源。

我們將添加以下代碼行文件:

DATABASES = {
     'default': {
          'ENGINE' : 'django.db.backends.sqlite3',
          'NAME' : os.path.join(BASE_DIR, 'db.sqlite3'),
     }
}

 

Q27。舉例說明如何在Django中編寫VIEW?

答: 在Django中編寫視圖:

from django.http import HttpResponse
import datetime

def Current_datetime(request):
     now = datetime.datetime.now()
     html = "<html><body>It is now %s</body></html>" % now
     return HttpResponse(html)

以HTML文檔的形式返回當前日期和時間

Q28。提到Django模板的組成部分。

答: 模板是一個簡單的文本文件。它可以創建任何text-based格式,如XML,CSV,HTML等。模板包含在評估模板時替換為值的變量和控製模板邏輯的標記(%tag%)。

Django Template - Python Interview Questions - Edureka數字:Python麵試問題 – Django模板

Q29。解釋在Django框架中使用session?

答: Django提供的會話允許您在per-site-visitor的基礎上存儲和檢索數據。 Django通過在客戶端放置會話ID cookie並在服務器端存儲所有相關數據來抽象發送和接收cookie的過程。

Django Framework - Python Interview Questions - Edureka數字:Python訪談問題 – Django框架

所以數據本身並不存儲在客戶端。從安全角度來看,這很好。

Q30。列出Django中的繼承樣式。

答: 在Django中,有三種可能的繼承樣式:

  1. 抽象基類:當您隻希望父類包含您不想為每個子模型鍵入的信息時,使用此樣式。
  2. Multi-table繼承:使用此樣式如果您是sub-classing現有模型並且需要每個模型都有自己的數據庫表。
  3. 代理模型:您可以使用此模型,如果您隻想修改模型的Python級別行為,而無需更改模型的字段。

網頁抓取 – Python訪談問題

Q31。如何使用我已經知道的URL地址本地保存圖像?

答: 我們將使用以下代碼從URL地址本地保存圖像

import urllib.request
urllib.request.urlretrieve("URL", "local-filename.jpg")

Q32。如何獲取任何網址或網頁的Google緩存時限?

答: 使用以下URL格式:

http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE

請務必將“URLGOESHERE”替換為要檢索其緩存的頁麵或站點的正確Web地址,並查看時間。例如,要查看edureka.co的Google Webcache年齡,您需要使用以下網址:

http://webcache.googleusercontent.com/search?q=cache:edureka.co

Q33。您需要從IMDb前250電影頁麵中抓取數據,隻需要字段電影名稱,年份和評級。

答: 我們將使用以下代碼行:

from bs4 import BeautifulSoup

import requests
import sys

url = 'http://www.imdb.com/chart/top'
response = requests.get(url)
soup = BeautifulSoup(response.text)
tr = soup.findChildren("tr")
tr = iter(tr)
next(tr)

for movie in tr:
title = movie.find('td', {'class': 'titleColumn'} ).find('a').contents[0]
year = movie.find('td', {'class': 'titleColumn'} ).find('span', {'class': 'secondaryInfo'}).contents[0]
rating = movie.find('td', {'class': 'ratingColumn imdbRating'} ).find('strong').contents[0]
row = title + ' - ' + year + ' ' + ' ' + rating

print(row)

上述代碼將有助於從IMDb的前250名列表中刪除數據

數據分析 – Python麵試問題

Q34。什麽是Python中的map函數?

答: Map函數執行作為第一個參數給出的函數,該函數遍曆第二個參數給出的迭代的所有元素的。如果給定的函數包含多於1個參數,則給出了許多迭代。

Q35。如何在NumPy數組中獲得N個最大值的索引?

答: 我們可以使用以下代碼獲取NumPy數組中N個最大值的索引:

import numpy as np
arr = np.array([1, 3, 2, 4, 5])
print(arr.argsort()[-3:][::-1])

輸出

[ 4 3 1 ]

Q36。你如何用Python /NumPy計算百分位數?

答: 我們可以使用以下代碼計算百分位數

import numpy as np
a = np.array([1,2,3,4,5])
p = np.percentile(a, 50)  #Returns 50th percentile, e.g. median
print(p)

輸出

3

Q37。 NumPy陣列(arrays)相對(嵌套)Python列表(lists)有哪些優勢?

答:

  1. Python的列表是高效的general-purpose容器。它們支持(相當)有效的插入,刪除,追加和連接,Python的list comprehension使它們易於構造和操作。
  2. Python列表的一些限製:它們不支持向量化“vectorized”操作,如元素加法和乘法,並且它們可以包含不同類型的對象這一事實意味著Python必須存儲每個元素的類型信息,並且必須在每個元素上操作時執行類型調度代碼。
  3. NumPy不僅效率更高;它也更方便。你可以免費獲得大量的向量和矩陣運算,這有時可以避免不必要的工作。
  4. NumPy數組更快,你可以使用NumPy,FFT,卷積,快速搜索,基本統計,線性代數,直方圖等內置方法。

Q38。解釋裝飾器的用法。

答: Python中的裝飾器用於修改或注入函數或類中的代碼。使用裝飾器,您可以包裝類或函數方法調用,以便在執行原始代碼之前或之後執行一段代碼。裝飾器可用於檢查權限,修改或跟蹤傳遞給方法的參數,將調用記錄到特定方法等。

Q39。 NumPy和SciPy有什麽區別?

答:

  1. 在理想的世界中,NumPy隻包含數組數據類型和最基本的操作:索引,排序,重塑,基本元素函數等。
  2. 所有數字代碼都將駐留在SciPy中。但是,NumPy的一個重要目標是兼容性,因此NumPy試圖保留其前任任何一個支持的所有功能。
  3. 因此,NumPy包含一些線性代數函數,即使它們更恰當地屬於SciPy。無論如何,SciPy包含更多功能更全版本的線性代數模塊,以及許多其他數值算法。
  4. 如果你使用python進行科學計算,你應該安裝NumPy和SciPy。大多數新功能屬於SciPy而非NumPy。

Q40。如何使用NumPy /SciPy製作3D繪圖/可視化?

答: 與2D繪圖一樣,3D圖形超出了NumPy和SciPy的範圍,但就像2D情況一樣,存在與NumPy集成的包。 Matplotlib在mplot3d子包中提供基本的3D繪圖,而Mayavi使用功能強大的VTK引擎提供各種high-quality 3D可視化功能。

 

多項選擇題

Q41。以下哪個語句創建字典? (多個正確的答案可能)

a)d = {}
b)d = {“john”:40,“peter”:45}
c)d = {40:“john”,45:“peter”}
d)d =(40:“john”,45:“50”)

回答:b,c, d。

通過指定鍵和值來創建字典。

Q42。其中哪一個是floor division?

a) /
b)//
C) %
d)沒有提到的

回答:b)//

例如,5.0/2 = 2.5,5.0 //2 = 2

Q43。標識符的最大可能長度是多少?

a)31個字符
b)63個字符
c)79個字符
d)以上都不是

回答:d)以上都不是

標識符可以是任意長度。

Q44。為什麽不鼓勵以下劃線開頭的局部變量名?

a)它們用於表示類的私有變量
b)他們混淆了口譯員
c)它們用於表示全局變量
d)他們放慢執行速度

回答:a)它們用於表示類的私有變量

由於Python沒有私有變量的概念,因此前導下劃線用於表示不能從類外部訪問的變量。

Q45。以下哪項是無效聲明?

a)abc = 1,000,000
b)a b c = 1000 2000 3000
c)a,b,c = 1000,2000,3000
d)a_b_c = 1,000,000

回答:b)a b c = 1000 2000 3000

變量名稱中不允許使用空格。

Q46。以下是什麽輸出?

try:
    if '1' != 1:
        raise "someError"
    else:
        print("someError has not occured")
except "someError":
    print ("someError has occured")

a)發生了someError
b)沒有發生someError
c)無效代碼
d)以上都不是

回答:c)無效代碼

新的異常類必須從BaseException繼承。這裏沒有這樣的繼承。

Q47。假設list1是[2,33,222,14,25],什麽是list1 [-1]?

a)錯誤
b)沒有
c)25
d)2

回答:c)25

索引-1對應於列表中的最後一個索引。

Q48。要打開文件c:\ scores.txt進行編寫,我們使用

a)outfile = open(“c:\scores.txt”,“r”)
b)outfile = open(“c:\\scores.txt”,“w”)
c)outfile = open(file = “c:\scores.txt”,“r”)
d)outfile = open(file = “c:\\scores.txt”,“o”)

回答:b)該位置包含雙斜杠(\\),w用於指示正​​在寫入文件。

Q49。以下是什麽輸出?

f = None

for i in range (5):
    with open("data.txt", "w") as f:
        if i > 2:
            break

print f.closed

a)True
b)False
c)None
d)Error

回答:a)True

與open文件一起使用時,WITH語句可確保在with塊退出時關閉文件對象。

Q50。何時執行try-except-else的else部分?

a)總是
b)發生異常時
c)沒有異常發生時
d)當發生異常時除了塊

回答:c)沒有異常發生時

當沒有異常發生時,執行else部分。

參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3957.html,轉載請注明來源鏈接。