當前位置: 首頁>>編程語言>>正文


Python麵試常見的30個問題及答案

 

Python Interview Questions

Python麵試問題

問題1。 Python的主要功能是什麽?

python特性如下:

  1. 解釋型
  2. 動態類型
  3. 麵向對象
  4. 簡潔明了
  5. 免費自由
  6. 有一個龐大的社區

Q.2。區分深層和淺層拷貝。

深拷貝將對象複製到另一個對象中。這意味著如果您對對象的副本進行更改,則不會影響原始對象。在Python中,我們使用函數 deepcopy(),我們導入拷貝模塊,用法如下:

>>> import copy
>>> b=copy.deepcopy(a)

Deep Copy - Python Interview Questions and Answers

深層複製 – Python麵試問題與解答

但是,淺拷貝會將一個對象的引用複製到另一個對象。因此,如果我們在副本中進行更改,則會影響原始對象。方法 copy(),用法如下:

>>> b=copy.copy(a)

Shallow Copy - Python Interview Questions and Answers

淺拷貝 – 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

Q.4。用Python解釋三元運算符。

在Python中,與C++不同,我們沒有?:,但我們有:

[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是一種多線程語言。它有一個multi-threading包。

GIL(全局解釋器鎖)確保一次執行單個線程。一個線程保存GIL並在將其傳遞給下一個線程之前做了一些工作。這就產生了並行執行的錯覺。但實際上,它隻是在CPU上輪流輪流。當然,所有傳遞都會增加執行的開銷。

問題6。在Python中解釋繼承。

當一個類繼承自另一個類時,它被稱為繼承自parent /base /super類的子類/派生/子類。它繼承/獲取所有成員(屬性和方法)。

 Python Interview Questions - inheritance in Python.

Python訪談問題 – Python中的繼承

繼承使我們可以重用我們的代碼,並且還可以更輕鬆地創建和維護應用程序。 Python支持以下類型的繼承:

  1. 單一繼承 – 類繼承自單個基類。
  2. 多重繼承 – 一個類繼承自多個基類。
  3. 多級繼承 – 類繼承自基類,而基類又繼承自另一個基類。
  4. 分層繼承 – 多個類繼承自單個基類。
  5. 混合遺傳 – 混合繼承是兩種或更多種類型的繼承的組合。

 

Q.7。什麽是Flask?

Python Flask正如我們之前討論的那樣,是一個用於Python的Web微框架。它基於’Werkzeug,Jinja 2和良好意圖’BSD許可證。它的兩個依賴項是Werkzeug和Jinja2。這意味著它幾乎不依賴於外部庫。因此,我們可以稱之為輕型框架。

會話使用簽名cookie來允許用戶查看和修改會話內容。它會記住從一個請求到另一個請求的信息。但是,要修改會話,用戶必須具有密鑰Flask.secret_key。

Q.8。如何在Python中管理內存?

Python有一個私有堆空間來容納所有對象和數據結構。作為程序員,我們無法訪問它;由解釋器來管理它。但是使用核心API,我們可以訪問一些工具。 Python內存管理器控製分配。

此外,內置的垃圾收集器會回收所有未使用的內存,以便可以將其用於堆空間。

Q.9。在Python中解釋 help()和 dir()函數。

help()函數顯示文檔字符串及其參數的幫助。

>>> import copy
>>> help(copy.copy)

有關copy模塊中的方法copy的幫助:

copy(X)

對任意的淺拷貝操作Python對象

有關詳細信息,請參閱模塊的__doc__字符串。

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時,所有內存都是de-allocated嗎?

這裏的答案是否定的。該模塊使用循環引用其他對象或從全局命名空間引用的對象,並不總是在退出Python時釋放。

另外,C庫保留的部分內存是不可能de-allocate的。

Q.11。什麽是monkey補丁?

在run-time上動態修改類或模塊。

>>> 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中的字典是什麽?

A python dictionary 是我從未在其他語言中看到過的東西,比如C++或者Java編程。Python中的字典擁有key-value對。

>>> roots={25:5,16:4,9:3,4:2,1:1}
>>> type(roots)
>>> roots[9]

3

字典是可變的,我們也可以使用comprehension來創建它。

>>> 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

**當我們不知道將會有多少關鍵字參數時,它會獲取關鍵字參數。

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

A.1

B.2

C.7

args和kwargs這個詞是一個慣例,我們可以使用任何東西代替它們,但最好延用管理。

 

Q.14。編寫Python邏輯來計算文件中的大寫字母數。

>>> import os
>>> os.chdir('C:\\Users\\lifei\\Desktop')
>>> with open('Today.txt') as today:
    count=0
    for i in today.read():
        if i.isupper():
            count+=1
    print(count)

26

Q.15。什麽是負的索引?

我們來看一個list吧。

>>> mylist=[0,1,2,3,4,5,6,7,8]

與正索引不同,負索引從右邊開始搜索。

>>> mylist[-3]

6

這也有助於從後麵切片:

>>> mylist[-6:-1]

[3,4,5,6,7]

Q.16。你如何本地(in-place)隨機化列表的內容?

為此,我們將從random模塊中導入函數 shuffle()。

>>> from random import shuffle
>>> shuffle(mylist)
>>> mylist

[3,4,8,0,5,7,6,2,1]

Q.17。用Python解釋 join()和 split()。

join()允許我們通過我們指定的字符將字符串中的字符連接在一起。

>>> ','.join('12345')

“1,2,3,4,5”

split()允許我們在指定的字符周圍分割一個字符串。

>>> '1,2,3,4,5'.split(',')

[‘1’,’2’,’3’,’4’,’5’]

問題18。Python是區分大小寫(case-sensitive)嗎?

如果語言區分myname和Myname之類的標識符,則語言為case-sensitive。換句話說,它關心小寫或大寫。讓我們用Python嘗試一下。

>>> myname='Ayushi'
>>> Myname

Traceback (most recent call last):

File “<pyshell#3>”, line 1, in <module>

Myname

NameError: name ‘Myname’ is not defined

如您所見,這引發了NameError。這意味著Python確實是case-sensitive。

 

Q.19。在Python中標識符可以多長?

在Python中,標識符可以是任意長度。除此之外,我們必須遵循一些規則來命名一個:

  1. 它隻能以A-Z或a-z中的字符或下劃線開頭。
  2. 其餘部分可以包含以下內容:A-Z /a-z /_ /0-9。
  3. 正如我們在前一個問題中所討論的那樣,Python是區分大小寫的(case-sensitive)。
  4. 關鍵字不能用作標識符。 Python有以下關鍵字:
and def False import not True
as del finally in or try
assert elif for is pass while
break else from lambda print with
class except global None raise yield
continue exec if nonlocal return

 

問題20。你如何將字符串轉換為小寫?

我們使用 lower()方法。

>>> 'AyuShi'.lower()

“ayushi”

要將其轉換為大寫,我們使用 upper()。

>>> 'AyuShi'.upper()

“AYUSHI”

另外,要檢查字符串是全部大寫還是全部小寫,我們使用方法 isupper()和 islower()。

>>> 'AyuShi'.isupper()

False

>>> 'AYUSHI'.isupper()

True

>>> 'ayushi'.islower()

True

>>> '@yu$hi'.islower()

True

>>> '@YU$HI'.isupper()

True

因此,像@和$這樣的字符同時滿足大小寫判斷。

此外, istitle()將告訴我們字符串是否屬於標題情況。

>>> 'The Corpse Bride'.istitle()

True

 

Q.21。 Python中的pass語句是什麽?

我們的代碼中可能有時候還沒有決定要做什麽,但我們必須輸入一些東西才能使它在語法上正確。在這種情況下,我們使用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

6

Q.22。什麽是Python中的閉包?

當嵌套函數引用其封閉範圍中的值時,會產生閉包。這裏的重點是它記住了價值。

>>> def A(x):
        def B():
            print(x)
    return B
>>> A(7)()

7

有關閉包的更多深度解析,請參閱Python中的閉包

Q.23。解釋Python中的//,%和**運算符。

//運算符執行除法(floor division)。它將返回除法結果的整數部分。

>>> 7.0//2

3

普通除法將在這裏返回3.5。

同樣,**執行取冪。

>>> 2**10

1024

最後,%是模數。

>>> 13%7

6

>>> 3.5%1.5

0.5

 

問題24。什麽是membership操作符?

通過操作符’in’和’not in’,我們可以確認某個值是否是另一個的成員。

>>> 'me' in 'disappointment'

真正

>>> 'us' not in 'disappointment'

真正

Q.25。在Python中解釋identity運算符。

操作符’是’和’不’告訴我們兩個值是否具有相同的身份。

>>> 10 is '10'

False

>>> True is not False

True

 

Q.26。Python除了10進製,還可以使用那些進製?

在Python中,可以用二進製,八進製和十六進製輸入數字。

  1. 二進製數由0和1組成。要輸入二進製,我們使用前綴0b或0B。
>>> int(0b1010)

10

要將數字轉換為二進製形式,我們使用 bin()。

>>> bin(0xf)

“0b1111”

  1. 八進製數可以包含0到7之間的數字。我們使用前綴0o或0O。
>>> oct(8)

“0o10”

  1. 十六進製數字可以包含0到15之間的數字。我們使用前綴0x或0X。
>>> hex(16)

“為0x10”

>>> hex(15)

“0xf”

問題27。如何獲得字典中所有鍵的列表?

使用函數 keys()。

>>> mydict={'a':1,'b':2,'c':3,'e':5}
>>> mydict.keys()

dict_keys([‘a’,’b’,’c’,’e’])

Q.28。帶有前導下劃線的標識符的意義?

由於Python沒有私有變量的概念,因此使用前導下劃線來聲明變量private是一種慣例。這就是為什麽我們不能對我們不想私有的變量這樣做。

Q.29。如何在一個語句中聲明多個賦值?

有兩種方法可以做到這一點:

>>> 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.30。什麽是tuple unpacking?

這是一種將一組值打包成元組的方法。

>>> mytuple=3,4,5
>>> mytuple

(3,4,5)

這將3,4和5打包成mytuple。

現在,我們將元組中的值解包為變量x,y和z(tuple unpacking)。

>>> x,y,z=mytuple
>>> x+y+z

12

 

參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3959.html,未經允許,請勿轉載。