我們整理了Python面試的主要問題清單,分為7個部分:
- 基本面試問題
- OOPS面試問題
- 基本的Python程式
- Python庫面試問題
- 資料分析面試題
- 選擇題(MCQ)
基本的Python面試問題
Q1,Python中的串列和元組有什么區別?
| LIST | TUPLES |
|---|---|
| 串列是可變的,即可以編輯, | 元組是 不可變的(元組是無法編輯的串列), |
| 串列比元組慢, | 元組比串列快, |
| 語法:list_1 = [10,'全堆疊程式員社區',20] | 語法:tup_1 =(10,'全堆疊程式員社區',20) |
Q2,Python的主要功能是什么?
- Python是一種解釋型語言,這意味著,與C及其變種之類的語言不同,Python無需在運行前進行編譯,其他解釋語言包括PHP和Ruby,
- Python是動態型別的,這意味著您在宣告變數或類似的東西時不需要宣告變數的型別,您可以做類似的事情
x=111,然后x="I'm mushiming"沒有錯誤 - Python非常適合面向物件的編程,因為它允許定義類以及組成和繼承,Python沒有訪問說明(如C ++的
public,private), - 在Python中,函式是一流的物件,這意味著可以將它們分配給變數,從其他函式回傳并傳遞給函式,類也是一流的物件
- 撰寫Python代碼速度很快,但運行它通常比編譯語言要慢,幸運的是,Python允許包含基于C的擴展,因此可以消除瓶頸,并且經常可以解決瓶頸,該numpy的包就是一個很好的例子,它真的相當快的,因為很多數量的運算Python實際上是不參與的,
- Python在許多領域都有使用-Web應用程式,自動化,科學建模,大資料應用程式等等,它也經常用作“膠水”代碼,以使其他語言和組件發揮出色,
Q3,python是什么型別的語言?編程還是腳本?
回答: Python能夠撰寫腳本,但從一般意義上講,它被認為是一種通用編程語言,
Q4,Python是一種解釋語言嗎?
回答:解釋語言是在運行時之前不在機器級別代碼中的任何編程語言,因此,Python是一種解釋型語言,
Q5,什么是pep 8?
回答: PEP代表Python增強建議書,這是一組規則,用于指定如何格式化Python代碼以實作最大的可讀性,
Q6,如何在Python中管理記憶體?
答:
- python中的記憶體管理由Python專用堆空間管理,所有Python物件和資料結構都位于私有堆中,程式員無權訪問此私有堆,python解釋器代替了這個,
- Python物件的堆空間分配是由Python的記憶體管理器完成的,核心API允許訪問一些工具,以便程式員進行編碼,
- Python還具有一個內置的垃圾收集器,該垃圾收集器回收所有未使用的記憶體,并使其可用于堆空間,
Q7,Python中的命名空間是什么?
回答:命名空間是用于確保名稱唯一以避免命名沖突的命名系統,
Q8,什么是PYTHONPATH?
回答:這是一個環境變數,在匯入模塊時使用,每當匯入模塊時,都會查找PYTHONPATH以檢查各個目錄中是否存在匯入的模塊,解釋器使用它來確定要加載哪個模塊,
Q9,什么是python模塊?命名Python中一些常用的內置模塊?
回答: Python模塊是包含Python代碼的檔案,該代碼可以是函式類或變數,Python模塊是包含可執行代碼的.py檔案,
一些常用的內置模塊是:
- 作業系統-os
- 系統-sys
- 數學-math
- 隨機-random
- 資料時間-data time
- JSON格式
Q10.Python中的區域變數和全域變數是什么?
全域變數:
在函式外部或全域空間中宣告的變數稱為全域變數,程式中的任何函式都可以訪問這些變數,
區域變數:
在函式內部宣告的任何變數都稱為區域變數,此變數存在于區域空間而不是全域空間中,
例:
a=2
def add():
b=3
c=a+b
print(c)
add()
輸出: 5
當您嘗試在函式add()之外訪問區域變數時,它將引發錯誤,
Q11,python是否區分大小寫?
答:是的,Python是區分大小寫的語言,
Q12,什么是Python中的型別轉換?
回答:型別轉換是指將一種資料型別轉換為另一種資料型別,
int() –將任何資料型別轉換為整數型別
float() –將任何資料型別轉換為float型別
ord() –將字符轉換為整數
hex()–將整數轉換為十六進制
oct() –將整數轉換為八進制
tuple()–此函式用于轉換為元組,
set()–此函式在轉換為set后回傳型別,
list()– 此函式用于將任何資料型別轉換為串列型別,
dict()– 此函式用于將順序(鍵,值)的元組轉換為字典,
str()– 用于將整數轉換為字串,
復數(實數,imag)– 此函式將實數轉換為復數(實數,imag),
Q13,如何在Windows上安裝Python并設定路徑變數?
回答:要在Windows上安裝Python,請執行以下步驟:
- 從以下鏈接安裝python:https : //www.python.org/downloads/
- 將其安裝在您的PC上,在命令提示符下使用以下命令查找PC上PYTHON的安裝位置:cmd python,
- 然后轉到高級系統設定,添加一個新變數,并將其命名為PYTHON_NAME,然后粘貼復制的路徑,
- 查找路徑變數,選擇其值,然后選擇“編輯”,
- 如果該值不存在,請在該值的末尾添加分號,然后鍵入%PYTHON_HOME%
Q14,python是否需要縮進?
回答:縮進對于Python是必需的,它指定一個代碼塊,回圈,類,函式等中的所有代碼都在縮進塊中指定,通常使用四個空格字符來完成,如果您的代碼沒有必要縮進,那么它將無法正確執行,并且也會引發錯誤,
Q15,Python陣列和串列有什么區別?
回答:在Python中,陣列和串列具有相同的資料存盤方式,但是,陣列只能容納一個資料型別元素,而串列可以容納任何資料型別元素,
例:
import array as arr
My_Array=arr.array('i',[1,2,3,4])
My_list=[1,'system_mush',1.20]
print(My_Array)
print(My_list)
輸出:
array('i', [1, 2, 3, 4]) [1, 'system_mush', 1.2]
Q16,Python中的函式是什么?
回答:函式是僅在呼叫時才執行的代碼塊,要定義Python函式,可以使用def關鍵字,
例:
def Newfunc():
print("您好,歡迎關注Java架構師社區公眾號")
Newfunc(); #calling the function
輸出:您好,歡迎關注Java架構師社區公眾號
Q17,什么是__init__?
回答: __init__是Python中的方法或建構式,創建類的新物件/實體時,將自動呼叫此方法以分配記憶體,所有類都具有__init__方法,
這是一個如何使用它的例子,
class Employee:
def __init__(self, name, age,salary):
self.name = name
self.age = age
self.salary = 20000
E1 = Employee("XYZ", 23, 20000)
# E1 is the instance of class Employee.
#__init__ allocates memory for E1.
print(E1.name)
print(E1.age)
print(E1.salary)
輸出:
XYZ
23
20000
Q18,什么是lambda函式?
回答:匿名函式稱為lambda函式,此函式可以具有任意數量的引數,但是只能有一個陳述句,
例:
a = lambda x,y : x+y
print(a(5, 6))
輸出: 11
Q19,Python中的Self是什么?
回答:
Self是類的實體或物件,在Python中,這明確包含為第一個引數,但是,在Java中不是這種情況,它是可選的,它有助于區分具有區域變數的類的方法和屬性,
init方法中的self變數參考新創建的物件,而其他方法中的self變數參考其方法被呼叫的物件,
Q20, 什么是break,continue 和 pass?
| Break | 當滿足某些條件并將控制權轉移到下一條陳述句時,允許回圈終止, |
|---|---|
| Continue | 當滿足某些特定條件并將控制權轉移到回圈的開始時,允許跳過回圈的某些部分 |
| Pass | 在語法上需要一些代碼塊,但想跳過其執行時使用,這基本上是一個空操作,當執行此操作時,沒有任何反應, |
Q21, [::-1}是做什么的?
回答: [::-1]用于反轉陣列或序列的順序,
例如:
import array as arr
My_Array=arr.array('i',[1,2,3,4,5])
My_Array[::-1]
輸出:array('i',[5,4,3,2,1])
[::-1]重印有序資料結構(如陣列或串列)的反向副本,原始陣列或串列保持不變,
Q22,您如何在Python中將串列項隨機化?
答: 請看下面的例子:
from random import shuffle
x = ['Keep', 'The', 'Blue', 'Flag', 'Flying', 'High']
shuffle(x)
print(x)
以下代碼的輸出如下,
['Flying', 'Keep', 'Blue', 'High', 'The', 'Flag']
Q23,什么是python迭代器?
回答:迭代器是可以遍歷或迭代的物件,
Q24,如何在Python中生成亂數?
回答: 隨機模塊是用于生成亂數的標準模塊,該方法定義為:
import random
random.random
陳述句random.random()方法回傳[0,1)范圍內的浮點數,該函式生成隨機浮點數,隨機類使用的方法是隱藏實體的系結方法,可以完成Random實體來顯示創建單個執行緒的不同實體的多執行緒程式,在此使用的其他隨機生成器是:
- randrange(a,b):選擇一個整數并定義[a,b)之間的范圍,它通過從指定范圍內隨機選擇元素來回傳元素,它不會建立范圍物件,
- Uniform(a,b):選擇一個在[a,b)范圍內定義的浮點數,Iyt回傳該浮點數
- normalvariate(mean,sdev):用于正態分布,其中mu是平均值,而sdev是用于標準差的sigma,
- 使用和實體化的Random類創建一個獨立的多個亂數生成器,
Q25,range和xrange有什么區別?
回答: 就功能而言,在大多數情況下,xrange和range完全相同,它們都提供了一種生成整數串列供您使用的方法,但是您可以隨意使用,唯一的區別是range回傳一個Python串列物件,而x range回傳一個xrange物件,
這意味著xrange在運行時實際上不會像range那樣生成靜態串列,它使用稱為yield的特殊技術根據需要創建值,該技術與一種稱為生成器的物件一起使用,這意味著,如果您的范圍非常大,則想生成一個串列(例如十億),則可以使用xrange函式,
如果您有一個真正的記憶體敏感系統(例如正在使用的手機),則尤其如此,因為range將使用盡可能多的記憶體來創建整數陣列,這可能導致記憶體錯誤并使您的崩潰程式,
Q26,你如何用python寫注釋?
回答: Python中的注釋以#字符開頭,但是,有時也可以使用docstrings(用三引號引起來的字串)進行注釋,
例:
#Comments in Python start like this
print("Comments in Python start with a #")
輸出: Python中的注釋以#開頭
Comments in Python start with a #
Q27,什么是 pickling和unpickling?
回答: Pickle模塊接受任何Python物件并將其轉換為字串表示形式,并使用轉儲函式將其轉儲到檔案中,此程序稱為pickling,從存盤的字串表示形式檢索原始Python物件的程序稱為unpickling,
Q28,python中的生成器是什么?
回答:回傳可迭代專案集的函式稱為生成器,
Q29,您將如何大寫字串的第一個字母?
回答:在Python中,capitalize()方法將字串的首字母大寫,如果字串開頭已經由大寫字母組成,那么它將回傳原始字串,
Q30,您如何將字串轉換為全部小寫?
回答:要將字串轉換為小寫,可以使用lower()函式,
例:
stg='ABCD'
print(stg.lower())
輸出:
abcd
Q31,如何在python中注釋多行?
回答:多行注釋出現在多行中,所有要注釋的行都以#開頭,您也可以使用非常好的 快捷方式注釋多行,您需要做的就是按住ctrl鍵,并 在要包含#個字符的任何地方單擊滑鼠左鍵,然后只鍵入一次#,這將注釋您引入游標的所有行,
Q32,Python中的檔案字串是什么?
回答:檔案字串實際上不是注釋,但是它們是 檔案字串,這些檔案字串用三引號引起來,它們沒有分配任何變數,因此有時也可以用作注釋的目的,
例:
"""
Using docstring as a comment.
This code divides 2 numbers
"""
x=8
y=4
z=x/y
print(z)
輸出: 2.0
Q33,運算子和運算子的目的是什么?
回答:運算子是特殊功能,它們采用一個或多個值并產生相應的結果,
is:當兩個運算元為true時回傳true(例如:“ a”為“ a”)
not:回傳布林值的倒數
in:檢查某個元素是否以某種順序存在
Q34,Python中help()和dir()函式的用法是什么?
回答: Help()和dir()這兩個函式都可以從Python解釋器訪問,并用于查看內置函式的合并轉儲,
- Help()函式:help()函式用于顯示檔案字串,還可以幫助您查看與模塊,關鍵字,屬性等有關的幫助,
- Dir()函式:dir()函式用于顯示定義的符號,
Q35,每當Python退出時,為什么不取消分配所有記憶體?
答:
- 每當Python退出時,尤其是那些回圈參考其他物件或從全域名稱空間參考的物件的Python模塊都不會總是被取消分配或釋放,
- 不能取消分配C庫保留的那些記憶體部分,
- 退出時,由于具有自己有效的清除機制,Python會嘗試取消分配/銷毀所有其他物件,
Q36,Python中的字典是什么?
回答: Python中的內置資料型別稱為字典,它定義了鍵和值之間的一對一關系,字典包含一對鍵及其對應的值,字典由鍵索引,
讓我們舉個例子:
下面的示例包含一些鍵,國家,首都和總理,它們對應的值分別是印度,德里和莫迪,
dict={'Country':'India','Capital':'Delhi','PM':'Modi'}
print dict[Country]
輸出:India
print dict[Capital]
輸出:Delhi
print dict[PM]
輸出:Modi
Q37,如何在python中使用三元運算子?
答案: 三元運算子是用于顯示條件陳述句的運算子,它由true或false值以及必須對其評估的陳述句組成,
語法:
三元運算子將為:
[on_true]如果[expression]否則[on_false] x,y = 25,50big = x如果x <y否則
例:
該運算式的求值方式類似于x < y else y,在這種情況下,如果x < y為true,則該值以big = x回傳,如果不正確,則將發送big = y,
Q38,這是什么意思: args, * kwargs?為什么我們要使用它?*
回答: 當我們不確定要向函式傳遞多少個引數時,或者如果要將存盤的引數串列或元組傳遞給函式時,可以使用* args,** kwargs在我們不知道將多少個關鍵字引數傳遞給一個函式時使用,或者可用于將字典的值作為關鍵字引數傳遞,識別符號args和kwargs是一個約定,您也可以使用* bob和** billy,但這并不明智,
Q39,len()是做什么的?
Ans:用于確定字串,串列,陣列等的長度,
例:
stg='ABCD'
len(stg)
Q40,解釋Python中"re"模塊的split(),sub(),subn()方法,
回答: 為了修改字串,Python的“ re”模塊提供了3種方法,他們是:
- split()–使用正則運算式模式將給定的字串“拆分”為串列,
- sub()–查找所有與正則運算式模式匹配的子字串,然后將其替換為其他字串
- subn()–它類似于sub(),并且還回傳新字串以及no,更換,
Q41,什么是負索引,為什么要使用它們?
回答: Python中的序列已編入索引,并且由正數和負陣列成,正數使用“ 0”作為第一個索引,使用“ 1”作為第二個索引,程序繼續進行,
負數的索引從代表序列中最后一個索引的“ -1”開始,而倒數第二個索引則是“ -2”,并且該序列像正數一樣前移,
負索參考于從字串中洗掉任何換行符,并允許字串除以S [:-1]給出的最后一個字符外,負索引還用于顯示索引以正確的順序表示字串,
Q42, 什么是Python包?
回答: Python軟體包是包含多個模塊的名稱空間,
Q43,如何用Python洗掉檔案?
回答:要在Python中洗掉檔案,您需要匯入OS模塊,之后,您需要使用os.remove()函式,
例:
import os
os.remove("xyz.txt")
Q44,python的內置型別是什么?
回答: Python中的內置型別如下:
- Integers
- Floating-point
- Complex numbers
- Strings
- Boolean
- Built-in functions
Q45,與(嵌套)Python串列相比,NumPy陣列具有什么優勢?
答:
- Python的串列是有效的通用容器,它們支持(相當)高效的插入,洗掉,附加和連接,并且Python的串列理解使它們易于構造和操作,
- 它們有一定的局限性:它們不支持“向量化”操作,例如逐元素加法和乘法,并且它們可以包含不同型別的物件這一事實意味著Python必須存盤每個元素的型別資訊,并且在操作時必須執行型別調度代碼在每個元素上,
- NumPy不僅效率更高;這也更加方便,您可以免費獲得許多矢量和矩陣運算,有時這可以避免不必要的作業,而且它們也得到有效實施,
- NumPy陣列更快,您可以使用NumPy,FFT,卷積,快速搜索,基本統計資訊,線性代數,直方圖等內置大量內容,
Q46, 如何將值添加到python陣列?
回答:可以使用append(), extend() 和 insert(i,x) 函式將元素添加到陣列 ,
例:
a=arr.array('d', [1.1 , 2.1 ,3.1] )
a.append(3.4)
print(a)
a.extend([4.5,6.3,6.8])
print(a)
a.insert(2,3.8)
print(a)
輸出:
array('d',[1.1,2.1,3.1,3.4])
array('d',[1.1,2.1,3.1,3.4,4.5,6.3,6.8])
array('d',[1.1,2.1,3.8,3.1,3.4,4.5,6.3,6.8])
Q47,如何洗掉值到python陣列?
回答:可以使用pop() 或 remove() 方法洗掉陣列元素 ,這兩個函式的區別在于前者回傳洗掉的值,而后者不回傳,
例:
a=arr.array('d', [1.1, 2.2, 3.8, 3.1, 3.7, 1.2, 4.6])
print(a.pop())
print(a.pop(3))
a.remove(1.1)
print(a)
輸出:
4.6
3.1
array('d',[2.2,3.8,3.7,1.2])
Q48, Python是否具有OOps概念?
回答: Python是一種面向物件的編程語言,這意味著可以通過創建物件模型在python中解決任何程式,但是,Python既可以當作程序語言,也可以當作結構語言,
Q49,深層復制和淺層復制有什么區別?
回答: 創建新實體型別時,將使用淺表副本,并且它將復制的值保留在新實體中,淺復制用于復制參考指標,就像復制值一樣,這些參考指向原始物件,并且在類的任何成員中所做的更改也會影響其原始副本,淺拷貝允許更快地執行程式,并且取決于所使用的資料大小,
深度復制用于存盤已復制的值,深層復制不會將參考指標復制到物件,它參考一個物件,并存盤其他物件指向的新物件,在原始副本中所做的更改不會影響使用該物件的任何其他副本,由于為每個被呼叫的物件制作了某些副本,因此深層復制會使程式的執行速度變慢,
Q50,如何在Python中實作多執行緒?
答:
- Python有一個多執行緒程式包,但是如果您想使用多執行緒來加快代碼速度,那么使用它通常不是一個好主意,
- Python有一個稱為全域解釋器鎖(GIL)的構造,GIL確保您的“執行緒”之一只能在任何一次執行,執行緒獲取GIL,做一些作業,然后將GIL傳遞到下一個執行緒,
- 這發生得非常快,以至于人眼似乎您的執行緒正在并行執行,但實際上它們只是使用相同的CPU內核輪流執行,
- 所有這些GIL傳遞都會增加執行開銷,這意味著,如果您想使代碼運行更快,那么使用執行緒包通常不是一個好主意,
Q51, 在python中進行編譯和鏈接的程序是什么?
回答: 編譯和鏈接允許正確擴展新擴展名,而不會出現任何錯誤,并且只有在通過編譯程序時才能進行鏈接,如果使用動態加載,則取決于系統提供的樣式,python解釋器可用于提供配置設定檔案的動態加載,并將重新構建解釋器,
在此所需的步驟為:
- 創建系統編譯器支持的任何名稱和任何語言的檔案,例如file.c或file.cpp
- 將此檔案放在正在使用的發行版的Modules /目錄中,
- 在Modules /目錄中存在的Setup.local檔案中添加一行,
- 使用垃圾郵件file.o運行檔案
- 成功運行此命令后,可使用頂層目錄上的make命令來重建解釋器,
- 如果檔案被更改,則使用命令“ make Makefile”運行rebuildMakefile,
Q52, **什么是Python庫?列舉幾個, **
Python庫是Python軟體包的集合,一些最常用的python庫是– Numpy,Pandas,Matplotlib,Scikit-learn等,
Q53, 拆分的用途是什么?
split()方法用于在Python中分隔給定的字串,
例:
a="edureka python"
print(a.split())
輸出: ['edureka','python']
Q54, 如何在python中匯入模塊?
可以使用import 關鍵字匯入模塊,您可以通過三種方式匯入模塊:
例:
import array #importing using the original module name
import array as arr # importing using an alias name
from array import * #imports everything present in the array module
OOPS面試問題
Q55,用一個例子解釋Python中的繼承,
答案: 繼承允許一個類獲取另一類的所有成員(例如屬性和方法),繼承提供了代碼可重用性,使創建和維護應用程式變得更加容易,我們繼承的類稱為超類,而繼承的類稱為派生/子類,
它們是Python支持的不同型別的繼承:
- 單一繼承–派生類獲取單個超類的成員,
- 多級繼承-從基類base1繼承的派生類d1和從base2繼承的d2,
- 層次繼承–從一個基類可以繼承任意數量的子類
- 多重繼承–派生類繼承自多個基類,
Q56,如何在Python中創建類?
回答: Python中的類是使用class關鍵字創建的,
例:
class Employee:
def __init__(self, name):
self.name = name
E1=Employee("abc")
print(E1.name)
輸出: abc
Q57,Python中的猴子補丁是什么?
回答: 在Python中,術語“猴子補丁”僅指運行時對類或模塊的動態修改,
考慮以下示例:
# m.py
class MyClass:
def f(self):
print "f()"
然后我們可以像這樣運行猴子補丁測驗:
import m
def monkey_f(self):
print "monkey_f()"
m.MyClass.f = monkey_f
obj = m.MyClass()
obj.f()
輸出如下:
monkey_f()
如我們所見,我們使用模塊m之外 定義的函式 Monkey_f() 對 MyClass 中 f()的行為進行了一些更改,
Q58,python是否支持多重繼承?
回答:多重繼承意味著一個類可以從多個父類派生,與Java不同,Python確實支持多重繼承,
問59.什么是Python中的多型?
回答:多型性是指采取多種形式的能力,因此,例如,如果父類具有一個名為ABC的方法,則子類也可以具有一個具有相同名稱和引數的ABC方法,Python允許多型,
Q60,在Python中定義封裝?
回答:封裝意味著將代碼和資料系結在一起,封裝示例中的Python類,
Q61,您如何在Python中進行資料抽象?
回答:資料抽象僅提供所需的詳細資訊,并從世界中隱藏實作,這可以在Python中通過使用介面和抽象類來實作,
Q62,python是否使用訪問說明符?
回答: Python不會剝奪對實體變數或函式的訪問權限,Python提出了在變數,函式或方法的名稱前加上單下劃線或雙下劃線的概念,以模仿受保護和專用訪問說明符的行為,
Q63,如何在Python中創建一個空類?
回答:空類是在其塊內未定義任何代碼的類,可以使用pass 關鍵字創建它 ,但是,您可以在類本身之外創建此類的物件,在PYTHON中,PASS命令在執行時不執行任何操作,這是一個空陳述句,
例如-
class a:
pass
obj=a()
obj.name="xyz"
print("Name = ",obj.name)
輸出:
名稱= xyz
Q64,object()有什么作用?
回答:它回傳一個無特征的物件,該物件是所有類的基礎,而且,它不帶任何引數,
基本的Python程式
Q65,用Python撰寫程式以執行冒泡排序演算法,
def bs(a): # a = name of list
b=len(a)-1 # minus 1 because we always compare 2 adjacent values
for x in range(b):
for y in range(b-x):
if a[y]>a[y+1]:
a[y],a[y+1]=a[y+1],a[y]
return a
a=[32,5,3,6,7,54,87]
bs(a)
輸出: [3、5、6、7、32、54、87]
Q66,用Python撰寫程式以生成星形三角形,
def pyfunc(r):
for x in range(r):
print(' '*(r-x-1)+'*'*(2*x+1))
pyfunc(9)
輸出:
*
***
*****
*******
*********
***********
*************
***************
*****************
Q67,撰寫程式以用Python生成Fibonacci系列,
# Enter number of terms needed #0,1,1,2,3,5....
a=int(input("Enter the terms"))
f=0 #first element of series
s=1 #second element of series
if a<=0:
print("The requested series is
",f)
else:
print(f,s,end=" ")
for x in range(2,a):
next=f+s
print(next,end=" ")
f=s
s=next</pre>
輸出:輸入術語5 0 1 1 2 3
Q68,用Python撰寫程式以檢查數字是否為質數,
a=int(input("enter number"))
if a>1:
for x in range(2,a):
if(a%x)==0:
print("not prime")
break
else:
print("Prime")
else:
print("not prime")
輸出:
輸入數字3
Q69,用Python撰寫程式以檢查序列是否是回文,
a=input("enter sequence")
b=a[::-1]
if a==b:
print("palindrome")
else:
print("Not a Palindrome")
輸出:
輸入序列323 palindrome
Q70,撰寫一個單行,將計算檔案中大寫字母的數量,即使檔案太大而無法容納在記憶體中,您的代碼也應該可以作業,
回答: 讓我們先撰寫一個多行解決方案,然后將其轉換為單行代碼,
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())
Q71,用Python為數字資料集撰寫排序演算法,
回答: 以下代碼可用于在Python中對串列進行排序:
list = ["1", "4", "0", "6", "9"]
list = [int(i) for i in list]
list.sort()
print (list)
Q72,看下面的代碼,記下A0,A1,…An的最終值,
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]]
Python庫面試問題
Q73,解釋一下Flask是什么及其好處?
回答: Flask是基于“ Werkzeug,Jinja2和良好意圖” BSD許可證的Python Web微框架,Werkzeug和Jinja2是其兩個依賴項,這意味著它將幾乎不依賴外部庫,它使框架變得輕巧,同時幾乎沒有更新依賴性,并且安全漏洞更少,
會話基本上使您能夠記住從一個請求到另一個請求的資訊,在燒瓶中,會話使用簽名的cookie,因此用戶可以查看會話內容并進行修改,如果只有會話具有密鑰Flask.secret_key,則用戶可以修改會話,
Q74,Django比Flask好嗎?
回答: Django和Flask將在網路瀏覽器中鍵入的URL或地址映射為Python中的函式,
與Django相比,Flask簡單得多,但是Flask并沒有為您做很多事情,這意味著您需要指定詳細資訊,而Django為您做了很多作業,其中您不需要做很多作業,Django由預撰寫的代碼組成,用戶需要對其進行分析,而Flask則允許用戶創建自己的代碼,因此使理解代碼變得更加簡單,從技術上講,兩者都同樣好,并且都有各自的優缺點,
Q75,提及Django,Pyramid和Flask之間的差異,
答:
- Flask是一種“微框架”,主要用于具有更簡單要求的小型應用程式,在flask中,您必須使用外部庫,燒瓶可以使用了,
- 金字塔是為較大的應用程式而構建的,它提供了靈活性,并允許開發人員為他們的專案使用正確的工具,開發人員可以選擇資料庫,URL結構,模板樣式等,金字塔是可配置的,
- Django也可以像金字塔一樣用于更大的應用程式,它包括一個ORM,
Q76 ,討論Django體系結構,
答案: Django MVT模式:
圖: Python面試問題– Django體系結構
開發人員提供模型,視圖和模板,然后將其映射到URL,而Django發揮了神奇的作用將其提供給用戶,
Q77,說明如何在Django中設定資料庫,
回答: 您可以使用命令edit mysite / setting.py,它是一個普通的python模塊,模塊級別表示Django設定,
Django默認使用SQLite,對于Django用戶而言,這很容易,因為它不需要任何其他型別的安裝,如果您的資料庫選擇不同,則必須與DATABASE“默認”項中的以下鍵相匹配才能匹配資料庫連接設定,
- 引擎:您可以使用'django.db.backends.sqlite3','django.db.backeneds.mysql','django.db.backends.postgresql_psycopg2','django.db.backends.oracle'等更改資料庫上
- 名稱:資料庫的名稱,如果您使用SQLite作為資料庫,則資料庫將是計算機上的檔案,名稱應為完整的絕對路徑,包括該檔案的檔案名,
- 如果您未選擇SQLite作為資料庫,則必須添加密碼,主機,用戶等設定,
Django使用SQLite作為默認資料庫,它將資料作為單個檔案存盤在檔案系統中,如果您確實有資料庫服務器-PostgreSQL,MySQL,Oracle,MSSQL-并希望使用它而不是SQLite,請使用資料庫的管理工具為Django專案創建一個新資料庫,無論哪種方式,在您擁有(空)資料庫之后,剩下的就是告訴Django如何使用它,這是專案的settings.py檔案進入的位置,
我們將以下代碼行添加到setting.py檔案:
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.sqlite3',
'NAME' : os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Q78,舉例說明如何在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檔案形式回傳當前日期和時間
Q79,提及Django模板的組成,
回答: 模板是一個簡單的文本檔案,它可以創建任何基于文本的格式,如XML,CSV,HTML等,模板包含在評估模板時將變數替換為值的變數,以及用于控制模板邏輯的標簽(%tag%),
圖: Python面試問題– Django模板
Q80,解釋Django框架中會話的使用?
回答: Django提供了一個會話,使您可以基于每個站點訪問者存盤和檢索資料,Django通過將會話ID cookie放置在客戶端并將所有相關資料存盤在服務器端來抽象化發送和接收cookie的程序,
圖:Python面試問題– Django框架
因此資料本身不存盤在客戶端,從安全角度來看,這很好,
Q81, 列出Django中的繼承樣式,
回答: 在Django中,有三種可能的繼承樣式:
- 抽象基類:當您只希望父類的類保留您不想為每個子模型鍵入的資訊時,使用此樣式,
- 多表繼承:如果要對現有模型進行子類化并且需要每個模型都有自己的資料庫表,則使用此樣式,
- 代理模型:如果只想修改模型的Python級別行為,而不更改模型的欄位,則可以使用此模型,
Web Scraping-Python面試問題
Q82,如何使用我已經知道URL地址的Python在本地保存影像?
回答: 我們將使用以下代碼從URL地址本地保存圖片
import urllib.request
urllib.request.urlretrieve("URL", "local-filename.jpg")
Q83,如何獲取任何URL或網頁的Google快取年齡?
回答: 請使用以下網址格式:
http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE
確保將“ URLGOESHERE”替換為要檢索其快取并查看時間的頁面或站點的正確網址,例如,要檢查edureka.co的Google Webcache年齡,您可以使用以下URL:
http://webcache.googleusercontent.com/search?q=cache:edureka.co
Q84,您需要從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面試問題
Q85,Python中的地圖功能是什么?
回答: map函式在作為第二引數給出的iterable的所有元素上執行作為第一引數給出的功能,如果給定的函式接受多個引數,那么將給出許多可迭代的變數,#關注鏈接以了解更多類似功能,
Q86,python numpy是否比串列更好?
回答: 由于以下三個原因,我們使用python numpy陣列而不是串列:
- Less Memory
- Fast
- Convenient
Q87,如何獲取NumPy陣列中N個最大值的索引?
回答: 我們可以使用以下代碼在NumPy陣列中獲得N個最大值的索引:
import numpy as np
arr = np.array([1, 3, 2, 4, 5])
print(arr.argsort()[-3:][::-1])
輸出量
[ 4 3 1 ]
Q88,如何使用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
Q89,NumPy和SciPy有什么區別?
答:
- 在理想情況下,NumPy除了陣列資料型別和最基本的操作外,將不包含任何內容:索引,排序,重塑,基本的元素函式等,
- 所有數字代碼都將駐留在SciPy中,但是,NumPy的重要目標之一是兼容性,因此NumPy嘗試保留其前任任一個所支持的所有功能,
- 因此,NumPy包含一些線性代數函式,即使這些函式更恰當地屬于SciPy,無論如何,SciPy都包含線性代數模塊的更多全功能版本,以及許多其他數值演算法,
- 如果您正在使用python進行科學計算,則可能應該同時安裝NumPy和SciPy,大多數新功能屬于SciPy,而不是NumPy,
Q90,您如何使用NumPy / SciPy制作3D圖/可視化影像?
回答: 與2D繪圖一樣,3D圖形也超出了NumPy和SciPy的范圍,但就像在2D情況下一樣,存在與NumPy集成的軟體包,Matplotlib在mplot3d子軟體包中提供了基本的3D繪圖,而Mayavi利用強大的VTK引擎提供了多種高質量的3D可視化功能,
選擇題(MCQ)
Q91,以下哪個陳述句創建字典?(可能有多個正確答案)
a) d = {}
b) d = {“john”:40, “peter”:45}
c) d = {40:”john”, 45:”peter”}
d) d = (40:”john”, 45:”50”)
答案: b,c和d,
通過指定鍵和值來創建字典,
Q92,地板分隔是哪一個?
a)/ b)// c)% d)沒有提及
答案: b)//
當兩個運算元均為整數時,python會切掉小數部分并為您提供四舍五入值,以使用下位除法獲得準確的答案,例如,5/2 = 2.5,但是兩個運算元都是整數,因此python中此運算式的答案為2,要獲得2.5作為答案,請使用//進行下限除法,所以5 // 2 = 2.5
Q93,識別符號的最大可能長度是多少?
a)31個字符 b)63個字符 c)79個字符 d)以上都不是
答案: d)以上都不是
識別符號可以是任何長度,
Q94,為什么不鼓勵使用下劃線開頭的區域變數名?
a)它們用于指示類的私有變數 b)它們使解釋器混亂 c)它們用于指示全域變數 d)它們減慢了執行速度
答: a)它們用于指示類的私有變數
由于Python沒有專用變數的概念,因此前導下劃線用于指示不得從類外部訪問的變數,
Q95,以下哪項是無效的陳述?
a)abc = 1,000,000 b)abc = 1000 2000 3000 c)a,b,c = 1000,2000,3000 d)a_b_c = 1,000,000
答案: b)abc = 1000 2000 3000
變數名稱中不允許使用空格,
Q96,以下內容的輸出是什么?
try:
if '1' != 1:
raise "someError"
else:
print("someError has not occured")
except "someError":
print ("someError has occured")
a)發生了一些錯誤 b)尚未發生了一些錯誤 c)無效的代碼 d)以上都不是
答案: c)無效代碼
一個新的例外類必須繼承自BaseException,這里沒有這樣的繼承,
Q97,假設list1是[2,33,222,14,25],那么list1 [-1]是什么?
a)錯誤 b)無 c)25 d)2
答案: c)25
索引-1對應于串列中的最后一個索引,
Q98,要打開檔案c:scores.txt進行寫入,我們使用
a)outfile =打開(“ c:scores.txt”,“ r”) b)outfile =打開(“ c:scores.txt”,“ w”) c)outfile =打開(file =“ c:scores.txt” ”,“ r”) d)outfile =打開(檔案=“ c:scores.txt”,“ o”)
答案: b)該位置包含雙斜杠(),并且w用于指示正在寫入檔案,
Q99,以下內容的輸出是什么?
f = None
for i in range (5):
with open("data.txt", "w") as f:
if i > 2:
break
print f.closed
a)是 b)錯誤 c)無 d)錯誤
答案: a)正確
與打開檔案一起使用時,WITH陳述句可確保在with塊退出時關閉檔案物件,
Q100,try-except-else的else部分何時執行?
a)總是 b)發生例外時 c)沒有例外發生時 d)except塊中發生例外時
答案: c)沒有例外發生時
else部分在沒有例外發生時執行,
我希望這套Python面試問題能幫助您準備面試,祝一切順利!
歡迎關注 Java架構師社區公眾號.
本文轉載自Java架構師必看 ,更多內容點擊查看!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195918.html
標籤:Java
上一篇:020_Java流程控制
下一篇:mybatis 框架學習筆記
