一份真實的Python面試題

自學Python已有一段時間了,就想着找份面試題來檢驗一下本身的學習狀況,今天就和你們分享一份本身從網上找到的貨真價實的Python面試題,每道題目看似簡單,但若是基礎知識不牢固,很容易回答不全面。python

 

1. python 經常使用數據結構有哪些?請簡要介紹一下。面試

 

答:Python中常見的數據結構能夠統稱爲容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的容器。因此,Python經常使用數據結構有:列表、字典、元組、集合安全

 

關於這個問題,通常也會順帶問:Python中哪些數據類型是可變的,哪些是不可變的?數據結構

 

答:可變/不可變是針對該對象所指向的內存中的值是否可變來判斷的。如可變類型的數據類型有:列表、字典、集合;不可變類型的數據類型有:字符串、元組、數字app

 

2. 簡要描述 Python 中單引號、雙引號、三引號的區別。函數

 

答:首先,單引號和雙引號在使用時基本上沒有什麼區別;學習

 

惟一須要注意的是:網站

  • 當字符串中有單引號時,最好在外面使用雙引號;編碼

  • 當有雙引號時,最好在外面使用單引號;人工智能

  • 三引號通常不經常使用,除了用來作註釋外,還能夠用來打印多行字符串。特殊用途,是能夠打印多行字符串。

 

讀者福利,想要了解python人工智能可直接點擊連接便可領取相關學習福利包:石墨文檔

是安全網站放心,繼續訪問就能夠領取了哦

 

3. 如何在一個 function 裏面設置一個全局的變量?

 

答:全局變量是指定義在函數外部的變量。全局變量的做用域爲全局。

局部變量是指定義在函數內部的變量。局部變量的做用域爲函數內,除了函數就無效了。

 

例如:

 

num = 100
def func():
   global num
   num = 200
   num += 100
   print(num)

func()
print(num)

300
300

 

 

總結:若是要在函數中給全局變量賦值,須要用global關鍵字聲明。

 

4. Python 裏面如何拷貝一個對象?(賦值、淺拷貝、深拷貝的區別)

 

答:賦值是將一個對象的地址賦值給一個變量,讓變量指向該地址(舊瓶裝舊酒

淺拷貝就是對引用的拷貝

深拷貝是對對象的資源的拷貝

 

舉例說明:

(1)

 

a = ['hello',[1,2,3]]
b = a[:]

print([id(x) for x in a])
print([id(x) for x in b])

a[0] = 'world'
a[1].append(4)
print(a)
print(b)

[34305224, 33841800]
[34305224, 33841800]
['world', [1, 2, 3, 4]]
['hello', [1, 2, 3, 4]]

 

淺拷貝是在另外一塊地址中建立一個新的變量或容器,可是容器內的元素的地址均是源對象的元素的地址的拷貝。也就是說新的容器中指向了舊的元素(新瓶裝舊酒)。

 

(2)

 

from copy import deepcopy
a = ['hello',[1,2,3]]
b = deepcopy(a)

print([id(x) for x in a])
print([id(x) for x in b])

a[0] = 'world'
a[1].append(4)
print(a)
print(b)


[30766280, 30785352]
[30766280, 31727688]
['world', [1, 2, 3, 4]]
['hello', [1, 2, 3]]

 

深拷貝是在另外一塊地址中建立一個新的變量或容器,同時容器內的元素的地址也是新開闢的,僅僅是值相同而已,是徹底的副本。也就是說(新瓶裝新酒)。

 

總 結

 

(1)當對象爲不可變類型時,不管是賦值,淺拷貝仍是深拷貝,那麼改變其中一個值時,另外一個都是不會跟着變化的。

 

(2)當對象爲可變對象時,若是是賦值和淺拷貝,那麼改變其中任意一個值,那麼另外一個會跟着發生變化的;若是是深拷貝,是不會跟着發生改變的。

 

5. 若是 custname 字符串的內容爲 utf-8 的字符,如何將 custname 的內容轉爲 gb18030 的字符串?

 

答:先將custname編碼格式轉換爲unicode,再轉換爲gb18030。即custname.decode(‘utf-8’).encode(‘gb18030’)。

 

6. 請寫出一段 Python 代碼實現刪除一個 list 裏面的重複元素。

 

答:方法(一)利用集合set的特性,元素是非重複的

 

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

def fun1(a):
   a = list(set(a))
   print(a)

fun1(a)

[1, 2, 3, 4, 5]

 

方法(二)利用字典的fromkeys來自動過濾重複值

 

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

def fun1(a):
   b = {}
   b = b.fromkeys(a)
   c = list(b.keys())
   print(c)

c = fun1(a)

 

7. 這兩個參數是什麼意思:*args,**kwargs?

 

答:首先,*args和**kwargs並非必須這樣寫,只有前面的*和**纔是必須的,你能夠寫成*var和**vars。

 

其次,*args和**kwargs主要用於函數定義,你能夠將不定量的參數傳遞給一個函數。

 

其中,*args是用來發送一個非鍵值對的可變數量的參數列表給一個函數;

 

**kwargs則容許將不定長度的鍵值對,做爲參數傳遞給一個函數,若是你想要在一個函數裏處理帶名字的參數,你應該使用**kwargs。

 

8. 統計以下 list 單詞及其出現次數。

 

a=['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']

 

答:我能想到的最簡單的方法就是用collection庫

 

from collections import Counter

a = ['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']
b = Counter(a)
print(b)

Counter({'apple': 3, 'banana': 2, 'tomato': 1, 'orange': 1, 'watermeton': 1})

 

9. 給列表中的字典排序:假設有以下 list 對象

 

alist=[{"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25}]

 

將 alist 中的元素按照 age 從大到小排序。

 

答:利用list的內置函數sort來進行排序

 

alist=[{"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25}]
alist.sort(key=lambda x:x['age'])
print(alist)

[{'name': 'a', 'age': 20}, {'name': 'c', 'age': 25}, {'name': 'b', 'age': 30}]

 

10. 寫出下列代碼的運行結果

 

a = 1
def fun(a):
  a = 2
fun(a)
print(a)

 

a = []
def fun(a):
  a.append(1)
fun(a)
print(a)

 

class Person:
    name = 'Lily'

p1 = Person()
p2 = Person()
p1.name = 'Bob'
print(p1.name)
print(p2.name)
print(Person.name)

 

答:第一段代碼的運行結果爲:1

第二段代碼的運行結果爲:[1]

第三段代碼的運行結果爲:

 

Bob

Lily

Lily

 

11. 假設有以下兩個 list:a = ['a', 'b', 'c', 'd', 'e'],b = [1, 2, 3, 4, 5],將 a 中的元素做爲 key,b 中元素做爲 value,將 a,b 合併爲字典。

答:

 

a = ['a','b','c','d','e']
b = [1,2,3,4,5]
c = dict(zip(a,b))
print(c)

 

 

總結

 

經過作這份真實的面試題,我發現本身對一些知識掌握的比較模糊,基礎知識還有待進一步的,致使對一些問題回答的還不夠全面。

 

最後,我以爲這也是一種學Python的好方法呀,能夠不斷檢驗本身的學習狀況,督促本身不斷進步。

 

小夥伴們,大家作對了幾道呀?歡迎留言交流Python學習。

看到末尾的朋友,以爲這篇文章對你有益的話,麻煩點個贊關注多多支持下!

相關文章
相關標籤/搜索