▍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)
>[1,2,7,4,5,6]
numbers.extend([7,8,9])
>[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.remove(5)
> [1,2,3,4]
del numbers[0]
>[2,3,4]
numbers.pop()
>4
▍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
▍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):
> 1,2,3,4
# (start, end, step)
for i in range(0, 5, 2):
>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
lst1 is not lst2
▍20、Python是否有main函數?
是的,它有的。隻要我們運作Python腳本,它就會自動執行。
▍21、什麼是lambda函數?
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:
# iterator
lst1 = iter(lst)
next(lst1)
>1
>2
for i in lst1:
>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="[email protected]",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 [email protected]
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
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
▍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)