在過去的2020年,Python贏得了年度TIOBE程式語言獎,成為過去一年最受歡迎的程式語言。 在資料科學和機器學習等領域中,被廣泛使用。
#正值「金三銀四」招募季,小F給大家整理了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]]
▍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] del numbers[0] >[2,3,4] numbers.pop() >4
▍14、什么是switch语句。如何在Python中创建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
▍15、举例说明Python中的range函数?
range:range函数返回从起点到终点的一系列序列。
range(start, end, step),第三个参数是用于定义范围内的步数。
# number for i in range(5): print(i) > 0,1,2,3,4 # (start, end) for i in range(1, 5): print(i) > 1,2,3,4 # (start, end, step) for i in range(0, 5, 2): print(i) >0,2,4
▍16、==和is的区别是?
==比较两个对象或值的相等性。
is运算符用于检查两个对象是否属于同一内存对象。
lst1 = [1,2,3] lst2 = [1,2,3] lst1 == lst2 >True lst1 is lst2 >False
▍17、如何更改列表的数据类型?
要将列表的数据类型进行更改,可以使用tuple()或者set()。
lst = [1,2,3,4,2] # 更改为集合 set(lst) ## {1,2,3,4} # 更改为元组 tuple(lst) ## (1,2,3,4,2)
▍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 is not lst2 >True
▍20、Python有沒有main函數?
#是的,它有的。只要我們執行Python腳本,它就會自動執行。
#▍21、
##▍21、
######################Lambda函數是不帶名稱的單行函數,可以有n個參數,但只能有一個表達式。也稱為匿名函數。 ######
a = lambda x, y:x + y print(a(5, 6)) > 11
▍22、iterables和iterators之间的区别?
iterable:可迭代是一个对象,可以对其进行迭代。在可迭代的情况下,整个数据一次存储在内存中。
iterators:迭代器是用来在对象上迭代的对象。它只在被调用时被初始化或存储在内存中。迭代器使用next从对象中取出元素。
# List is an iterable lst = [1,2,3,4,5] for i in lst: print(i) # iterator lst1 = iter(lst) next(lst1) >1 next(lst1) >2 for i in lst1: print(i) >3,4,5
▍23、Python中的Map Function是什么?
map函数在对可迭代对象的每一项应用特定函数后,会返回map对象。
▍24、解释Python中的Filter?
过滤器函数,根据某些条件从可迭代对象中筛选值。
# iterable lst = [1,2,3,4,5,6,7,8,9,10] def even(num): if num%2==0: return num # filter all even numbers list(filter(even,lst)) --------------------------------------------- [2, 4, 6, 8, 10]
▍25、解释Python中reduce函数的用法?
reduce()函数接受一个函数和一个序列,并在计算后返回数值。
from functools import reduce a = lambda x,y:x+y print(reduce(a,[1,2,3,4])) > 10
▍26、什麼是pickling和unpickling?
pickling是將Python物件(甚至是Python程式碼),轉換為字串的過程。
unpickling是將字串,轉換為原來物件的逆過程。
#▍27、解釋*args和**kwargs?
*args,我們不確定要傳遞給函數參數的數量時所使用的。
def add(* num): sum = 0 for val in num: sum = val + sum print(sum) add(4,5) add(7,4,6) add(10,34,23) --------------------- 9 17 57
**kwargs,是当我们想将字典作为参数传递给函数时使用的。
def intro(**data): print("\nData type of argument:",type(data)) for key, value in data.items(): print("{} is {}".format(key,value)) intro(name="alex",Age=22, Phone=1234567890) intro(name="louis",Email="a@gmail.com",Country="Wakanda", Age=25) -------------------------------------------------------------- Data type of argument: <class 'dict'> name is alex Age is 22 Phone is 1234567890 Data type of argument: <class 'dict'> name is louis Email is a@gmail.com Country is Wakanda Age is 25
▍28、解释re模块的split()、sub()、subn()方法?
split():只要模式匹配,此方法就会拆分字符串。
sub():此方法用于将字符串中的某些模式替换为其他字符串或序列。
subn():和sub()很相似,不同之处在于它返回一个元组,将总替换计数和新字符串作为输出。
import re 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)
▍29、Python中的生成器是什么?
生成器(generator)的定义与普通函数类似,生成器使用yield关键字生成值。
如果一个函数包含yield关键字,那么该函数将自动成为一个生成器。
# A program to demonstrate the use of generator object with next() A generator function def Fun(): yield 1 yield 2 yield 3 # x is a generator object x = Fun() print(next(x)) ----------------------------- 1 print(next(x)) ----------------------------- 2
▍30、如何使用索引来反转Python中的字符串?
string = 'hello' string[::-1] >'olleh'
▍31、类和对象有什么区别?
类(Class)被视为对象的蓝图。类中的第一行字符串称为doc字符串,包含该类的简短描述。
在Python中,使用class关键字可以创建了一个类。一个类包含变量和成员组合,称为类成员。
对象(Object)是真实存在的实体。在Python中为类创建一个对象,我们可以使用obj = CLASS_NAME()
例如:obj = num()
使用类的对象,我们可以访问类的所有成员,并对其进行操作。
class Person: """ This is a Person Class""" # varable age = 10 def greets(self): print('Hello') # object obj = Person() print(obj.greet) ---------------------------------------- Hello
▍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),是指在運行時動態修改類別或模組。
from SomeOtherProduct.SomeModule import SomeClass def speak(self): return "Hello!" SomeClass.speak = speak
▍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')}
▍42、解释Python中map()函数?
map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。
我们还可以在map()函数中,同时传递多个可迭代对象。
numbers = (1, 2, 3, 4) result = map(lambda x: x + x, numbers) print(list(result))
▍43、Python中的装饰器是什么?
装饰器(Decorator)是Python中一个有趣的功能。
它用于向现有代码添加功能。这也称为元编程,因为程序的一部分在编译时会尝试修改程序的另一部分。
def addition(func): def inner(a,b): print("numbers are",a,"and",b) return func(a,b) return inner @addition def add(a,b): print(a+b) add(5,6) --------------------------------- numbers are 5 and 6 sum: 11
▍44、编写程序,查找文本文件中最长的单词
def longest_word(filename): with open(filename, 'r') as infile: words = infile.read().split() max_len = len(max(words, key=len)) return [word for word in words if len(word) == max_len] print(longest_word('test.txt')) ---------------------------------------------------- ['comprehensions']
▍45、编写程序,检查序列是否为回文
a = input("Enter The sequence") ispalindrome = a == a[::-1] ispalindrome >True
▍46、编写程序,打印斐波那契数列的前十项
fibo = [0,1] [fibo.append(fibo[-2]+fibo[-1]) for i in range(8)] fibo > [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
▍47、编写程序,计算文件中单词的出现频率
from collections import Counter def word_count(fname): with open(fname) as f: return Counter(f.read().split()) print(word_count("test.txt"))
▍48、编写程序,输出给定序列中的所有质数
lower = int(input("Enter the lower range:")) upper = int(input("Enter the upper range:")) list(filter(lambda x:all(x % y != 0 for y in range(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]
▍49、编写程序,检查数字是否为Armstrong
将每个数字依次分离,并累加其立方(位数)。
最后,如果发现总和等于原始数,则称为阿姆斯特朗数(Armstrong)。
num = int(input("Enter the number:\n")) order = len(str(num)) sum = 0 temp = num while temp > 0: digit = temp % 10 sum += digit ** order temp //= 10 if num == sum: print(num,"is an Armstrong number") else: print(num,"is not an Armstrong number")
▍50、用一行Python代码,从给定列表中取出所有的偶数和奇数
a = [1,2,3,4,5,6,7,8,9,10] odd, even = [el for el in a if el % 2==1], [el for el in a if el % 2==0] print(odd,even) > ([1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
以上是金三銀四,50道必備的Python面試題(建議收藏)的詳細內容。更多資訊請關注PHP中文網其他相關文章!