程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

50道必備的Python面試題 (建議點贊)

編輯:Python

在過去的2021年,Python贏得了年度TIOBE編程語言獎,成為 過去一年最受歡迎的編程語言。在數據科學和機器學習等領域中,被廣泛使用。

備戰“金三銀四”,子冉給大家整理了50道Python面試題,還有相對應的答案,來幫助大家更好的了解和學習Python。

▍1、什麼是Python?為什麼它會如此流行?

Python是一種解釋的、高級的、通用的編程語言。

Python的設計理念是通過使用必要的空格與空行,增強代碼的可讀性。

它之所以受歡迎,就是因為它具有簡單易用的語法。

 

▍2、為什麼Python執行速度慢,我們如何改進它?

Python代碼執行緩慢的原因,是因為它是一種解釋型語言。它的代碼在運行時進行解釋,而不是編譯為本地語言。

為了提高Python代碼的速度,我們可以使用CPython、Numba,或者我們也可以對代碼進行一些修改。

1. 減少內存占用。

2. 使用內置函數和庫。

3. 將計算移到循環外。

4. 保持小的代碼庫。

5. 避免不必要的循環

▍3、Python有什麼特點?

1. 易於編碼

2. 免費和開源語言

3. 高級語言

4. 易於調試

5. OOPS支持

6. 大量的標准庫和第三方模塊

7. 可擴展性(我們可以用C或C++ 編寫Python代碼)

8. 用戶友好的數據結構

▍4、Python有哪些應用?

1. Web開發

2. 桌面GUI開發

3.人工智能和機器學習

4. 軟件開發

5. 業務應用程序開發

6. 基於控制台的應用程序

7. 軟件測試

8. Web自動化

9. 基於音頻或視頻的應用程序

10. 圖像處理應用程序

▍5、Python的局限性?

1. 速度

2. 移動開發

3. 內存消耗(與其他語言相比非常高)

4. 兩個版本的不兼容(2,3)

5. 運行錯誤(需要更多測試,並且錯誤僅在運行時顯示)

6. 簡單性

▍6、Python代碼是如何執行的?

首先,解釋器讀取Python代碼並檢查是否有語法或格式錯誤。

如果發現錯誤,則暫停執行。如果沒有發現錯誤,則解釋器會將Python代碼轉換為等效形式或字節代碼。

然後將字節碼發送到Python虛擬機(PVM),這裡Python代碼將被執行,如果發現任何錯誤,則暫停執行,否則結果將顯示在輸出窗口中。

▍7、如何在Python中管理內存?

Python內存由Python的私有headspace管理。

所有的Python對象和數據結構都位於一個私有堆中。私用堆的分配由Python內存管理器負責。

Python還內置了一個的垃圾收集器,可以回收未使用的內存並釋放內存,使其可用於headspace。

▍8、解釋Python的內置數據結構?

Python中主要有四種類型的數據結構。

列表:列表是從整數到字符串甚至另一個列表的異構數據項的集合。列表是可變的。列表完成了其他語言中大多數集合數據結構的工作。列表在[ ]方括號中定義。

例如:a = [1,2,3,4]

集合:集合是唯一元素的無序集合。集合運算如聯合|,交集&和差異,可以應用於集合。集是不可變的。用於表示一個集合。

例如:a = {1,2,3,4}

元組:Python元組的工作方式與Python列表完全相同,只是它們是不可變的。用於定義元組。

例如:a =(1,2,3,4)

字典:字典是鍵值對的集合。它類似於其他語言中的hash map。在字典裡,鍵是唯一且不可變的對象。

例如:a = {‘number’:[1,2,3,4]}

▍9、解釋//、%、* *運算符?

//(Floor Division)-這是一個除法運算符,它返回除法的整數部分。

例如:5 // 2 = 2

%(模數)-返回除法的余數。

例如:5 % 2 = 1

**(冪)-它對運算符執行指數計算。a ** b表示a的b次方。

例如:5 ** 2 = 25、5 ** 3 = 125

▍10、Python中的單引號和雙引號有什麼區別?

在Python中使用單引號(‘ ‘)或雙引號 (” “)是沒有區別的,都可以用來表示一個字符串。

這兩種通用的表達方式,除了可以簡化程序員的開發,避免出錯之外,還有一種好處,就是可以減少轉義字符的使用,使程序看起來更簡潔,更清晰。

▍11、Python中append,insert和extend的區別?

append:在列表末尾添加新元素。

insert:在列表的特定位置添加元素。

extend:通過添加新列表來擴展列表。

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

numbers.append( 6)
print(numbers)
>[ 1, 2, 3, 4, 5, 6]
## insert(position,value)
numbers.insert( 2, 7)
print(numbers)
>[ 1, 2, 7, 4, 5, 6]
numbers.extend([ 7, 8, 9])
print(numbers)
>[ 1, 2, 7, 4, 5, 6, 7, 8, 9]
numbers.append([ 4, 5])
>[ 1, 2, 7, 4, 5, 6, 7, 8, 9,[ 4, 5]]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

▍12、break、continue、pass是什麼?

break:在滿足條件時,它將導致程序退出循環。

continue:將返回到循環的開頭,它使程序在當前循環迭代中的跳過所有剩余語句。

pass:使程序傳遞所有剩余語句而不執行。

▍13、區分Python中的remove,del和pop?

remove:將刪除列表中的第一個匹配值,它以值作為參數。

del:使用索引刪除元素,它不返回任何值。

pop:將刪除列表中頂部的元素,並返回列表的頂部元素。

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

numbers.remove( 5)
> [ 1, 2, 3, 4]
delnumbers[ 0]
>[ 2, 3, 4]
numbers.pop
> 4
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

▍14、什麼是switch語句。如何在Python中創建switch語句?

switch語句是實現多分支選擇功能,根據列表值測試變量。

switch語句中的每個值都被稱為一個case。

在Python中,沒有內置switch函數,但是我們可以創建一個自定義的switch語句。

switcher = {

1: “January”,
2: “February”,
3: “March”,
4: “April”,
5: “May”,
6: “June”,
7: “July”,
8: “August”,
9: “September”,
10: “October”,
11: “November”,
12: “December”
}
month = int(input)
print(switcher.get(month))
> 3
march
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

▍15、舉例說明Python中的range函數?

range:range函數返回從起點到終點的一系列序列。

range(start, end, step),第三個參數是用於定義范圍內的步數。

# number

fori inrange( 5):
print(i)
> 0, 1, 2, 3, 4
# (start, end)
fori inrange( 1, 5):
print(i)
> 1, 2, 3, 4
# (start, end, step)
fori inrange( 0, 5, 2):
print(i)
> 0, 2, 4
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

▍16、==和is的區別是?

==比較兩個對象或值的相等性。

is運算符用於檢查兩個對象是否屬於同一內存對象。

lst1 = [ 1, 2, 3]

lst2 = [ 1, 2, 3]
lst1 == lst2
> True
lst1 islst2
> False
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

▍17、如何更改列表的數據類型?

要將列表的數據類型進行更改,可以使用tuple或者set。

lst = [ 1, 2, 3, 4, 2]

# 更改為集合
set(lst) ## {1,2,3,4}
# 更改為元組
tuple(lst) ## (1,2,3,4,2)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

▍18、Python中注釋代碼的方法有哪些?

在Python中,我們可以通過下面兩種方式進行注釋。

1. 三引號”’,用於多行注釋。

2. 單井號#,用於單行注釋。

▍19、!=和is not運算符的區別?

!=如果兩個變量或對象的值不相等,則返回true。

is not是用來檢查兩個對象是否屬於同一內存對象。

lst1 = [ 1, 2, 3, 4]

lst2 = [ 1, 2, 3, 4]
lst1 != lst2
> False
lst1 isnotlst2
> True
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

▍20、Python是否有main函數?

是的,它有的。只要我們運行Python腳本,它就會自動執行。

▍21、什麼是lambda函數?

Lambda函數是不帶名稱的單行函數,可以具有n個參數,但只能有一個表達式。也稱為匿名函數。

a = lambdax, y:x + y

print(a( 5, 6))
> 11
  • 1.
  • 2.
  • 3.

▍22、iterables和iterators之間的區別?

iterable:可迭代是一個對象,可以對其進行迭代。在可迭代的情況下,整個數據一次存儲在內存中。

iterators:迭代器是用來在對象上迭代的對象。它只在被調用時被初始化或存儲在內存中。迭代器使用next從對象中取出元素。

# List is an iterable

lst = [ 1, 2, 3, 4, 5]
fori inlst:
print(i)
# iterator
lst1 = iter(lst)
next(lst1)
> 1
next(lst1)
> 2
fori inlst1:
print(i)
> 3, 4, 5
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

▍23、 Python中的Map Function是什麼?

map函數在對可迭代對象的每一項應用特定函數後,會返回map對象。

▍24、解釋 Python中的Filter?

過濾器函數,根據某些條件從可迭代對象中篩選值。

# iterable

lst = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
defeven(num):
ifnum% 2== 0:
returnnum
# filter all even numbers
list(filter(even,lst))
———————————————
[ 2, 4, 6, 8, 10]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

▍25、解釋Python中reduce函數的用法?

reduce函數接受一個函數和一個序列,並在計算後返回數值。

fromfunctools importreduce

a = lambdax,y:x+y
print(reduce(a,[ 1, 2, 3, 4]))
> 10
  • 1.
  • 2.
  • 3.
  • 4.

▍26、什麼是pickling和unpickling?

pickling是將Python對象(甚至是Python代碼),轉換為字符串的過程。

unpickling是將字符串,轉換為原來對象的逆過程。

▍27、解釋*args和**kwargs?

*args,是當我們不確定要傳遞給函數參數的數量時使用的。

def add(* num):

sum = 0
forval innum:
sum = val + sum
print(sum)
add( 4, 5)
add( 7, 4, 6)
add( 10, 34, 23)
———————
9
17
57
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

**kwargs,是當我們想將字典作為參數傳遞給函數時使用的。

▍28、解釋re模塊的 split、sub、subn方法 ?

split:只要模式匹配,此方法就會拆分字符串。

sub:此方法用於將字符串中的某些模式替換為其他字符串或序列。

subn:和sub很相似,不同之處在於它返回一個元組,將總替換計數和新字符串作為輸出。

importre

string = “There are two ball in the basket 101”
re.split( “\W+”,string)
—————————————
[ ‘There’, ‘are’, ‘two’, ‘ball’, ‘in’, ‘the’, ‘basket’, ‘101’]
re.sub( “[^A-Za-z]”, ” “,string)
—————————————-
‘There are two ball in the basket’
re.subn( “[^A-Za-z]”, ” “,string)
—————————————–
( ‘There are two ball in the basket’, 10)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

▍29、Python中的生成器是什麼?

生成器(generator)的定義與普通函數類似,生成器使用yield關鍵字生成值。

如果一個函數包含yield關鍵字,那麼該函數將自動成為一個生成器。

# A program to demonstrate the use of generator object with next A generator function

defFun:
yield1
yield2
yield3
# x is a generator object
x = Fun
print(next(x))
—————————–
1
print(next(x))
—————————–
2
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

▍30、如何使用索引來反轉Python中的字符串?

string = ‘hello’

string[:: -1]
> ‘olleh’
  • 1.
  • 2.
  • 3.

▍31、類和對象有什麼區別?

類(Class)被視為對象的藍圖。類中的第一行字符串稱為doc字符串,包含該類的簡短描述。

在Python中,使用class關鍵字可以創建了一個類。一個類包含變量和成員組合,稱為類成員。

對象(Object)是真實存在的實體。在Python中為類創建一個對象,我們可以使用obj = CLASS_NAME

例如:obj = num

使用類的對象,我們可以訪問類的所有成員,並對其進行操作。

classPerson:

“”” This is a Person Class”””
# varable
age = 10
defgreets(self):
print( ‘Hello’)
# object
obj = Person
print(obj.greet)
—————————————-
Hello
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

▍32、你對Python類中的self有什麼了解?

self表示類的實例。

通過使用self關鍵字,我們可以在Python中訪問類的屬性和方法。

注意,在類的函數當中,必須使用self,因為類中沒有用於聲明變量的顯式語法。

▍33、_init_在Python中有什麼用?

“__init__”是Python類中的保留方法。

它被稱為構造函數,每當執行代碼時都會自動調用它,它主要用於初始化類的所有變量。

▍34、解釋一下Python中的繼承?

繼承(inheritance)允許一個類獲取另一個類的所有成員和屬性。繼承提供代碼可重用性,可以更輕松地創建和維護應用程序。

被繼承的類稱為超類,而繼承的類稱為派生類/子類。

▍35、Python中OOPS是什麼?

面向對象編程,抽象(Abstraction)、封裝(Encapsulation)、繼承(Inheritance)、多態(Polymorphism)

▍36、什麼是抽象?

抽象(Abstraction)是將一個對象的本質或必要特征向外界展示,並隱藏所有其他無關信息的過程。

▍37、什麼是封裝?

封裝(Encapsulation)意味著將數據和成員函數包裝在一起成為一個單元。

它還實現了數據隱藏的概念。

▍38、什麼是多態?

多態(Polymorphism)的意思是「許多形式」。

子類可以定義自己的獨特行為,並且仍然共享其父類/基類的相同功能或行為。

▍39、什麼是Python中的猴子補丁?

猴子補丁(monkey patching),是指在運行時動態修改類或模塊。

fromSomeOtherProduct.SomeModule importSomeClass

defspeak(self):
return”Hello!”
SomeClass.speak = speak
  • 1.
  • 2.
  • 3.
  • 4.

▍40、Python支持多重繼承嗎?

Python可以支持多重繼承。多重繼承意味著,一個類可以從多個父類派生。

▍41、Python中使用的zip函數是什麼?

zip函數獲取可迭代對象,將它們聚合到一個元組中,然後返回結果。

zip函數的語法是zip(*iterables)

numbers = [ 1, 2, 3]

string = [ ‘one’, ‘two’, ‘three’]
result = zip(numbers,string)
print(set(result))
————————————-
{( 3, ‘three’), ( 2, ‘two’), ( 1, ‘one’)}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

▍42、解釋Python中map函數?

map函數將給定函數應用於可迭代對象(列表、元組等),然後返回結果(map對象)。

我們還可以在map函數中,同時傳遞多個可迭代對象。

numbers = ( 1, 2, 3, 4)

result = map( lambdax: x + x, numbers)
print(list(result))
  • 1.
  • 2.
  • 3.

▍43、Python中的裝飾器是什麼?

裝飾器( Decorator)是Python中一個有趣的功能。

它用於向現有代碼添加功能。這也稱為元編程,因為程序的一部分在編譯時會嘗試修改程序的另一部分。

defaddition(func):

definner(a,b):
print( “numbers are”,a, “and”,b)
returnfunc(a,b)
returninner
@addition
defadd(a,b):
print(a+b)
add( 5, 6)
———————————
numbers are 5and6
sum: 11
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

▍44、編寫程序,查找文本文件中最長的單詞

deflongest_word(filename):

withopen(filename, ‘r’) asinfile:
words = infile.read.split
max_len = len(max(words, key=len))
return[word forword inwords iflen(word) == max_len]
print(longest_word( ‘test.txt’))
—————————————————-
[ ‘comprehensions’]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

▍45、編寫程序,檢查序列是否為回文

a = input( “Enter The sequence”)

ispalindrome = a == a[:: -1]
ispalindrome
> True
  • 1.
  • 2.
  • 3.
  • 4.

▍46、編寫程序,打印斐波那契數列的前十項

fibo = [ 0, 1]

[fibo.append(fibo[ -2]+fibo[ -1]) fori inrange( 8)]
fibo
> [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
  • 1.
  • 2.
  • 3.
  • 4.

▍47、編寫程序,計算文件中單詞的出現頻率

fromcollections importCounter

defword_count(fname):
withopen(fname) asf:
returnCounter(f.read.split)
print(word_count( “test.txt”))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

▍48、編寫程序,輸出給定序列中的所有質數

lower = int(input( “Enter the lower range:”))

upper = int(input( “Enter the upper range:”))
list(filter( lambdax:all(x % y != 0fory inrange( 2, x)), range(lower, upper)))
————————————————-
Enter the lower range: 10
Enter the upper range: 50
[ 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

▍49、編寫程序,檢查數字是否為Armstrong

將每個數字依次分離,並累加其立方(位數)。

最後,如果發現總和等於原始數,則稱為阿姆斯特朗數(Armstrong)。

num = int(input( “Enter the number:\n”))

order = len(str(num))
sum = 0
temp = num
whiletemp > 0:
digit = temp % 10
sum += digit ** order
temp //= 10
ifnum == sum:
print(num, “is an Armstrong number”)
else:
print(num, “is not an Armstrong number”)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

▍50、用一行Python代碼,從給定列表中取出所有的偶數和奇數

a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

odd, even = [el forel ina ifel % 2== 1], [el forel ina ifel % 2== 0]
print(odd,even)
> ([ 1, 3, 5, 7, 9], [ 2, 4, 6, 8, 10])
  • 1.
  • 2.
  • 3.
  • 4.

 



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved