首頁 後端開發 Python教學 最常見的python面試題目及答案總結

最常見的python面試題目及答案總結

Feb 23, 2019 am 11:51 AM

最常見的python面試題目及答案總結

這篇文章帶給大家的內容是關於最常見的python面試題及答案總結,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

Python 新手在尋求一份 Python 程式設計工作前,必須熟知 Python 的基礎知識。程式設計網站 DataFlair 的技術團隊分享了一份 2018 年最常見 Python 面試題合集,既有基本的 Python 面試題,也有高階版試題來指導你準備面試,試題均附有答案。面試題內容包括程式設計、資料結構、腳本撰寫等主題。本文為上篇。

相關文章推薦:《2020年python面試題總結(最新)

#Q 1:Python 有哪些特色和優點?

作為程式設計入門語言,Python 主要有以下特點與優點:

可解釋

#具有動態特性

物件導向

簡潔簡單

開源

有強大的社群支援

#當然,其實Python 的優點遠不止於此。

Q 2:深拷貝和淺拷貝之間的差異是什麼?

答案:深拷貝就是將一個物件拷貝到另一個物件中,這表示如果你對一個物件的拷貝做出改變時,不會影響原始物件。在Python中,我們使用函數deepcopy()執行深拷貝,導入模組copy,如下所示:

>>> import copy
>>> b=copy.deepcopy(a)
登入後複製

最常見的python面試題目及答案總結

而淺拷貝則是將一個物件的參考拷貝到另一個物件上,所以如果我們在拷貝中改動,會影響原始物件。我們使用函數function()執行淺拷貝,使用如下所示:

>>> b=copy.copy(a)
登入後複製

最常見的python面試題目及答案總結

#Q 3. 列表和元組之間的差異是?

答:二者的主要差異是列表是可變的,而元組是不可變的。舉個例子,如下所示:

>>> mylist=[1,3,3]
>>> mylist[1]=2
>>> mytuple=(1,3,3)
>>> mytuple[1]=2
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
mytuple[1]=2
登入後複製

會出現以下報錯:

TypeError: ‘tuple’ object does not support item assignment
登入後複製

關於清單和元組的更多內容,可以查看這裡:

https://data-flair.training/blogs/python-tuples-vs-lists/

從Q4到Q20都是針對新手的Python面試基礎試題,不過有經驗的人也可以看看這些問題,複習一下基礎概念。

Q 4. 解釋一下Python 中的三元運算子

不像C ,我們在Python 中沒有?:,但我們有這個:

[on true] if [expression] else [on false]
登入後複製

如果表達式為True,就執行[on true]中的語句。否則,就執行[on false]中的語句。

以下是使用它的方法:

>>> a,b=2,3
>>> min=a if a<b else b
>>> min
登入後複製

執行結果:

2
>>> print("Hi") if a<b else print("Bye")
登入後複製

運行結果:

Hi
登入後複製

Q 5. 在Python 中如何實作多執行緒?

一個執行緒就是一個輕量級進程,多執行緒能讓我們一次執行多個執行緒。我們都知道,Python 是多執行緒語言,其內建有多執行緒工具包。

Python 中的 GIL(全域解釋器鎖定)確保一次執行單一執行緒。一個執行緒保存 GIL 並在將其傳遞給下個執行緒之前執行一些操作,這會讓我們產生並行運行的錯覺。但實際上,只是線程在 CPU 上輪流運行。當然,所有的傳遞都會增加程式執行的記憶體壓力。

Q 6. 解釋Python 中的繼承

#當一個類別繼承自另一個類,它就被稱為一​​個子類別/衍生類,繼承自父類別/基底類別/超類別。它會繼承/取得所有類別成員(屬性和方法)。

繼承能讓我們重新使用程式碼,也能更容易的建立和維護應用程式。 Python 支援以下種類的繼承:

單繼承:一個類別繼承自單一基底類別

多重繼承:一個類別繼承自多個基底類別

多層繼承:一個類別繼承自單一基底類,後者則繼承自另一個基底類別

分層繼承:多個類別繼承自單一基底類別

混合繼承:兩種或多種類型繼承的混合

更多關於繼承的內容,請參閱:

https://data-flair.training/blogs/python-inheritance/

Q 7. 什麼是Flask?

Flask 是 Python 編寫的一款輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,而模板引擎則使用 Jinja2。 Flask 使用 BSD 授權。其中兩個環境依賴是 Werkzeug 和 jinja2,這意味著它不需要依賴外部函式庫。正因如此,我們稱之為輕量級框架。

Flask 會話使用簽章 cookie 讓使用者檢視和修改會話內容。它會記錄從一個請求到另一個請求的資訊。不過,要修改會話,使用者必須有金鑰 Flask.secret_key。

Q 8. 在 Python 中是如何管理記憶體的?

Python 有一个私有堆空间来保存所有的对象和数据结构。作为开发者,我们无法访问它,是解释器在管理它。但是有了核心 API 后,我们可以访问一些工具。Python 内存管理器控制内存分配。

另外,内置垃圾回收器会回收使用所有的未使用内存,所以使其适用于堆空间。

Q 9. 解释 Python 中的 help() 和 dir() 函数

Help() 函数是一个内置函数,用于查看函数或模块用途的详细说明:

>>> import copy
>>> help(copy.copy)
登入後複製

运行结果为:

Help on function copy in module copy:

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.
登入後複製

Dir() 函数也是 Python 内置函数,dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

以下实例展示了 dir 的使用方法:

>>> dir(copy.copy)
登入後複製

运行结果为:

[‘__annotations__’, ‘__call__’, ‘__class__’, ‘__closure__’, ‘__code__’, ‘__defaults__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__get__’, ‘__getattribute__’, ‘__globals__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__kwdefaults__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__name__’, ‘__ne__’, ‘__new__’, ‘__qualname__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’]
登入後複製

Q 10. 当退出 Python 时,是否释放全部内存?

答案是 No。循环引用其它对象或引用自全局命名空间的对象的模块,在 Python 退出时并非完全释放。

另外,也不会释放 C 库保留的内存部分。

Q 11. 什么是猴子补丁?

在运行期间动态修改一个类或模块。

>>> class A:
    def func(self):
        print("Hi")
>>> def monkey(self):
print "Hi, monkey"
>>> m.A.func = monkey
>>> a = m.A()
>>> a.func()
登入後複製

运行结果为:

Hi, Monkey
登入後複製

Q 12. Python 中的字典是什么?

字典是 C++ 和 Java 等编程语言中所没有的东西,它具有键值对。

>>> roots={25:5,16:4,9:3,4:2,1:1}
>>> type(roots)
<class &#39;dict&#39;>
>>> roots[9]
登入後複製

运行结果为:

3
登入後複製

字典是不可变的,我们也能用一个推导式来创建它。

>>> roots={x**2:x for x in range(5,0,-1)}
>>> roots
登入後複製

运行结果:

{25: 5, 16: 4, 9: 3, 4: 2, 1: 1}
登入後複製

Q 13. 请解释使用 *args 和 **kwargs 的含义

当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args。

>>> def func(*args):
    for i in args:
        print(i)  
>>> func(3,2,1,4,7)
登入後複製

运行结果为:

3
2
1
4
7
登入後複製

在我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数。

>>> def func(**kwargs):
    for i in kwargs:
        print(i,kwargs[i])
>>> func(a=1,b=2,c=7)
登入後複製

运行结果为:

a.1

b.2

c.7
登入後複製

Q 14. 请写一个Python逻辑,计算一个文件中的大写字母数量

>>> import os

>>> os.chdir(&#39;C:\Users\lifei\Desktop&#39;)
>>> with open(&#39;Today.txt&#39;) as today:
    count=0
    for i in today.read():
        if i.isupper():
            count+=1
登入後複製

运行结果:

26
登入後複製

Q 15. 什么是负索引?

我们先创建这样一个列表:

>>> mylist=[0,1,2,3,4,5,6,7,8]
登入後複製

负索引和正索引不同,它是从右边开始检索。

>>> mylist[-3]
登入後複製

运行结果:

6
登入後複製

它也能用于列表中的切片:

>>> mylist[-6:-1]
登入後複製

结果:

[3, 4, 5, 6, 7]
登入後複製

Q 16. 如何以就地操作方式打乱一个列表的元素?

为了达到这个目的,我们从random模块中导入shuffle()函数。

>>> from random import shuffle
>>> shuffle(mylist)
>>> mylist
登入後複製

运行结果:

[3, 4, 8, 0, 5, 7, 6, 2, 1]
登入後複製

Q 17. 解释Python中的join()和split()函数

Join()能让我们将指定字符添加至字符串中。

>>> &#39;,&#39;.join(&#39;12345&#39;)
登入後複製

运行结果:

‘1,2,3,4,5’
登入後複製

Split()能让我们用指定字符分割字符串。

>>> &#39;1,2,3,4,5&#39;.split(&#39;,&#39;)
登入後複製

运行结果:

[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
登入後複製

Q 18. Python区分大小写吗?

如果能区分像myname和Myname这样的标识符,那么它就是区分大小写的。也就是说它很在乎大写和小写。我们可以用Python试一试:

>>> myname=&#39;Ayushi&#39;
>>> Myname
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
登入後複製

运行结果:

Myname
NameError: name ‘Myname’ is not defined
登入後複製

可以看到,这里出现了NameError,所以Python是区分大小写的。

Q 19. Python中的标识符长度能有多长?

在Python中,标识符可以是任意长度。此外,我们在命名标识符时还必须遵守以下规则:

只能以下划线或者 A-Z/a-z 中的字母开头

其余部分可以使用 A-Z/a-z/0-9

区分大小写

关键字不能作为标识符,Python中共有如下关键字:

Q 20. 怎么移除一个字符串中的前导空格?

字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法Istrip()可以将它从字符串中移除。

>>> &#39;   Ayushi &#39;.lstrip()
登入後複製

结果:

‘Ayushi   ‘
登入後複製

可以看到,该字符串既有前导字符,也有后缀字符,调用Istrip()去除了前导空格。如果我们想去除后缀空格,就用rstrip()方法。

>>> &#39;   Ayushi &#39;.rstrip()
登入後複製

结果:

‘   Ayushi’
登入後複製

从Q 21到Q 35是为有Python经验者准备的进阶版Python面试题。

Q 21. 怎样将字符串转换为小写?

我们使用lower()方法。

>>> &#39;AyuShi&#39;.lower()
登入後複製

结果:

‘ayushi’
登入後複製
登入後複製

使用upper()方法可以将其转换为大写。

>>> &#39;AyuShi&#39;.upper()
登入後複製

结果:

‘ayushi’
登入後複製
登入後複製

另外,使用isupper()和islower()方法检查字符串是否全为大写或小写。

>>> &#39;AyuShi&#39;.isupper()
False
>>> &#39;AYUSHI&#39;.isupper()
True
>>> &#39;ayushi&#39;.islower()
True
>>> &#39;@yu$hi&#39;.islower()
True
>>> &#39;@YU$HI&#39;.isupper()
True
登入後複製

那么,像@和$这样的字符既满足大写也满足小写。

Istitle()能告诉我们一个字符串是否为标题格式。

>>> &#39;The Corpse Bride&#39;.istitle()
True
登入後複製

Q 22. Python中的pass语句是什么?

在用Python写代码时,有时可能还没想好函数怎么写,只写了函数声明,但为了保证语法正确,必须输入一些东西,在这种情况下,我们会使用pass语句。

>>> def func(*args):
          pass 
>>>
登入後複製

同样,break语句能让我们跳出循环。

>>> for i in range(7):
    if i==3: break
print(i)
登入後複製

结果:

0
1
2
登入後複製

最后,continue语句能让我们跳到下个循环。

>>> for i in range(7):
    if i==3: continue
print(i)
登入後複製

结果:

0
1
2 
4 
5
6
登入後複製

Q 23. Python中的闭包是什么?
当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包。其意义就是会记录这个值。

>>> def A(x):
    def B():
        print(x)
    return B
>>> A(7)()
登入後複製

结果:

17
登入後複製

更多关于闭包的知识,请参看这里:

https://data-flair.training/blogs/python-closure/

**Q 24. 解释一下Python中的//,%和 ** 运算符**

//运算符执行地板除法(向下取整除),它会返回整除结果的整数部分。
>>> 7//2
3
登入後複製

这里整除后会返回3.5。

同样地,执行取幂运算。ab会返回a的b次方。

>>> 2**10
1024
登入後複製

最后,%执行取模运算,返回除法的余数。

>>> 13%7
6
>>> 3.5%1.5
0.5
登入後複製

Q 24. 在Python中有多少种运算符?解释一下算数运算符。

在Python中,我们有7种运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

我们有7个算术运算符,能让我们对数值进行算术运算:

1.加号(+),将两个值相加

>>> 7+8
15
登入後複製

2.减号(-),将第一个值减去第二个值

>>> 7-8
-1
登入後複製

3.乘号(*),将两个值相乘

>>> 7*8
56
登入後複製

4.除号(/),用第二个值除以第一个值

>>> 7/8
0.875
>>> 1/1
1.0
登入後複製

5.向下取整除、取模和取幂运算,参见上个问题。

Q 25. 解释一下Python中的关系运算符

关系运算符用于比较两个值。

1.小于号(<),如果左边的值较小,则返回True。

>>> &#39;hi&#39;<&#39;Hi&#39;
False
登入後複製

2.大于号(>),如果左边的值较大,则返回True。

>>> 1.1+2.2>3.3
True
登入後複製

3.小于等于号(<=),如果左边的值小于或等于右边的值,则返回Ture。

>>> 3.0<=3
True
登入後複製

4.大于等于号(>=),如果左边的值大于或等于右边的值,则返回True。

>>> True>=False
True
登入後複製

等于号(==),如果符号两边的值相等,则返回True。

>>> {1,3,2,2}=={1,2,3}
True
登入後複製

不等于号(!=),如果符号两边的值不相等,则返回True。

>>> True!=0.1
True
>>> False!=0.1
True
登入後複製

Q 26. 解释一下Python中的赋值运算符

这在Python面试中是个重要的面试问题。

我们将所有的算术运算符和赋值符号放在一起展示:

>>> a=7
>>> a+=1
>>> a
8
>>> a-=1
>>> a
7
>>> a*=2
>>> a
14
>>> a/=2
>>> a
7.0 
>>> a**=2
>>> a
49
>>> a//=3
>>> a
16.0
>>> a%=4
>>> a
0.0
登入後複製

Q 27. 解释一下Python中的逻辑运算符

Python中有3个逻辑运算符:and,or,not。

>>> False and True
False

>>> 7<7 or True
True

>>> not 2==2
False
登入後複製

Q 28. 解释一下Python中的成员运算符

通过成员运算符‘in’和‘not in’,我们可以确认一个值是否是另一个值的成员。

>>> &#39;me&#39; in &#39;disappointment&#39;
True

>>> &#39;us&#39; not in &#39;disappointment&#39;
True
登入後複製

Q 29. 解释一下Python中的身份运算符

这也是一个在Python面试中常问的问题。

通过身份运算符‘is’和‘is not’,我们可以确认两个值是否相同。

>>> 10 is &#39;10&#39;
False

>>> True is not False
True
登入後複製

Q 30. 讲讲Python中的位运算符

该运算符按二进制位对值进行操作。

与(&),按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

>>> 0b110 & 0b010
2
登入後複製

2.或(|),按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。

>>> 3|2
3
登入後複製

3.异或(^),按位异或运算符:当两对应的二进位相异时,结果为1

>>> 3^2
1
登入後複製

4.取反(~),按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1

>>> ~2
-3
登入後複製

5.左位移(<<),运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0

>>> 1<<2
4
登入後複製

6.右位移(>>),把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数

>>> 4>>2
1
登入後複製

更多关于运算符的知识,参考这里:
https://data-flair.training/blogs/python-operators/

Q 31. 在Python中如何使用多进制数字?

我们在Python中,除十进制外还可以使用二进制、八进制和十六进制。

二进制数字由0和1组成,我们使用 0b 或 0B 前缀表示二进制数。

>>> int(0b1010)
10
登入後複製

2.使用bin()函数将一个数字转换为它的二进制形式。

>>> bin(0xf)
‘0b1111’
登入後複製

3.八进制数由数字 0-7 组成,用前缀 0o 或 0O 表示 8 进制数。

>>> oct(8)
‘0o10’
登入後複製

4.十六进数由数字 0-15 组成,用前缀 0x 或者 0X 表示 16 进制数。

>>> hex(16)
‘0x10’

>>> hex(15)
‘0xf’
登入後複製

Q 32. 怎样获取字典中所有键的列表?

使用 keys() 获取字典中的所有键

>>> mydict={&#39;a&#39;:1,&#39;b&#39;:2,&#39;c&#39;:3,&#39;e&#39;:5}
>>> mydict.keys()
dict_keys([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;e&#39;])
登入後複製

Q 33. 为何不建议以下划线作为标识符的开头

因为Python并没有私有变量的概念,所以约定速成以下划线为开头来声明一个变量为私有。所以如果你不想让变量私有,就不要使用下划线开头。

Q 34. 怎样声明多个变量并赋值?

一共有两种方式:

>>> a,b,c=3,4,5 #This assigns 3, 4, and 5 to a, b, and c respectively
>>> a=b=c=3 #This assigns 3 to a, b, and c
登入後複製

Q 35. 元组的解封装是什么?

首先我们来看解封装:

>>> mytuple=3,4,5
>>> mytuple
(3, 4, 5)
登入後複製

这将 3,4,5 封装到元组 mytuple 中。

现在我们将这些值解封装到变量 x,y,z 中:

>>> x,y,z=mytuple
>>> x+y+z
登入後複製

得到结果12.

相关学习推荐:python视频教程

以上是最常見的python面試題目及答案總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles