關於Python爬蟲面試50道題

duanhao發表於2021-09-11

關於Python爬蟲面試50道題

語言特性

1.談談對 Python 和其他語言的區別

答:Python屬於比較“自由”的語言,首先變數使用前不需要宣告型別,其次語句結束不需要使用分號作為結尾,同時不需要大括號進行程式碼塊的標註,使用縮排對大括號進行代替。

2.簡述解釋型和編譯型程式語言

答:編譯型語言是將程式碼編譯成機器碼,然後執行,透過編譯可以使得程式直接以機器碼的形式進行工作。通俗一點就是將整個程式一次性編譯後再執行。解釋型語言則是編譯一句執行一句,編譯到哪裡執行到哪裡,每次執行前都要逐句編譯。通常情況下編譯型語言執行速度比解釋型快,但是現在的直譯器經常會針對語言進行最佳化,所以有時候解釋型語言速度反而比編譯型快。

3.Python 的直譯器種類以及相關特點?

答:CPython,官方使用的直譯器,用C語言編寫。IPython,基於CPython開發,增強了互動性。JPython,將Python編譯成Java位元組碼。IronPython,將Python編譯為.Net的位元組碼。

4.說說你知道的Python3 和 Python2 之間的區別?

答:1、print由關鍵字變為了函式。2、Python3預設使用utf-8,解決了Python2中使用ACSII導致的中文亂碼問題。3、將xrange與range進行合併,在Python3中只存在range一種寫法,本質上是xrange。

5.Python3 和 Python2 中 int 和 long 區別?

答:Python2中,int型能表示的數字長度取決於系統位數,32位系統長度為32位,64位系統長度為64位,long型則不受長度限制。在Python3中,所有的整型都為長整型。

6.xrange 和 range 的區別?

答:兩關鍵字都是用於生成指定範圍的列表,在Python3中已經合併為range了。在Python2中,xrange生成結果為迭代器,佔用空間小,range生成結果為列表,佔據空間較大。

編碼規範

7.什麼是 PEP8?

答:PEP8是Python程式設計的一種格式要求,為了提高程式的可讀性和規範性,在程式設計師之間互相約定好的一種程式碼格式

8.瞭解 Python 之禪麼?

答:在Python的互動模式下輸入 import this 就能看到Python之禪的內容了。

9.瞭解 dosctring 麼?

答:Python推崇程式碼即文件,通常在函式中第一個語句即表明了函式的用法及接受的引數,可以透過functiong.__doc__屬性來獲得。

10.瞭解型別註解麼?

答:型別註解是Python3中引入的新特性,透過def(x:int, y:int) -> int: 這樣的方式,標記引數及返回值的型別,這裡要注意,即使新增了了型別註解也不會對程式碼產生影響,它的作用更像是註釋,只是方便其他程式設計師瞭解引數及返回值型別。

11.例舉你知道 Python 物件的命名規範,例如方法或者類等

答:駝峰命名法

12.Python 中的註釋有幾種?

答:2種,單行的使用#的註釋方式,跨行的使用使用三個雙引號或三個單引號的的註釋方式。

13.如何優雅的給一個函式加註釋?

答:函式註釋通常在 def 語句下方,第一行表示函式用法,接下來對函式接受的引數進行解釋,最後對函式的返回值進行註釋,方便他人理解函式的用法。

14.如何給變數加註釋?

15.Python 程式碼縮排中是否支援 Tab 鍵和空格混用。

答:不支援,同時儘量使用4個空格代替Tab縮排。

16.是否可以在一句 import 中匯入多個庫?

答:可以,但不建議。

17.在給 Py 檔案命名的時候需要注意什麼?

答:使用全小寫或者下劃線進行命名。

18.例舉幾個規範 Python 程式碼風格的工具

答:YAPF,谷歌開發的程式碼規範工具。Black,依賴Python3.6+的第三方庫,可以直接將原始碼變為符合PEP8標準的程式碼

資料型別

字串

19.列舉 Python 中的基本資料型別?

答:字串string、數字number、字典dictionary、列表list、元組tuple、集合set。

20.如何區別可變資料型別和不可變資料型別

答:可變的資料型別有 列表、字典、集合,不可變的有字串、數字、元組。

21.將"hello world"轉換為首字母大寫"Hello World"

答:string.title()將每個單詞首字母大寫。

22.如何檢測字串中只含有數字?

答:Python的語法糖,字串型別自帶函式isdigit(),當字串中只存在數字返回True,反之返回False。

23.將字串"ilovechina"進行反轉

答:“ilovechina”[::-1]

24.Python 中的字串格式化方式你知道哪些?

答:format()

25.有一個字串開頭和末尾都有空格,比如“ adabdw ”,要求寫一個函式把這個字串的前後空格都去掉。

答:string.replace(’ ’ ,’’)

26.獲取字串”123456“最後的兩個字元。

答:“123456”[4:6:]或“123456"[-2::]

27.一個編碼為 GBK 的字串 S,要將其轉成 UTF-8 編碼的字串,應如何操作?

答:先編碼為Unicode,再解碼為 UTF-8,具體操作為 string.decode(),str.encode(encoding=‘utf-8’)該條存疑,有待驗證

28.s=“info:xiaoZhang 33 shandong”,用正則切分字串輸出[‘info’, ‘xiaoZhang’, ‘33’, ‘shandong’]

答:re.split(r’[: ]’, s)

27.怎樣將字串轉換為小寫?

答:string.lower()

28.單引號、雙引號、三引號的區別?

答:單引號表示的字串中不能帶有雙引號。雙引號表示的字串中可以存在單引號。三引號中可以存在單引號和雙引號,並且可以跨行表示字串,而單雙引號皆不能跨行。

29.a = "你好 中國 ",去除多餘空格只留一個空格。

答:re.sub(’ +’,’ ', a)

列表

30.已知 AList = [1,2,3,1,2],對 AList 列表元素去重,寫出具體過程。

答:list(set(AList)) 可以利用集合中不能存在相同元素的特性,利用型別轉換進行去重。也可使用迴圈遍歷進行判斷。

31.如何實現 “1,2,3” 變成 [“1”,“2”,“3”]

答:“1,2,3”.split(’,’)

32.給定兩個 list,A 和 B,找出相同元素和不同元素

答:如果列表內不存在重複元素的話,可以轉化為集合,利用集合的 “&&” 找出相同元素,再利用 “a-b","a^b"找出不同元素。若列表記憶體在重複元素,暫時只能想到兩個for迴圈進行查詢。

33.[[1,2],[3,4],[5,6]]一行程式碼展開該列表,得出[1,2,3,4,5,6]

答:sum([[1,2],[3,4],[5,6]], [])

34.合併列表[1,5,7,9]和[2,2,6,8]

答:這題沒理解,字面上合併相加就好了吧。。。。難道暗示要排序?

35.如何打亂一個列表的元素?

答:使用random庫中的random.shuffle(list)函式,該函式無返回值,會將傳入的引數列表隨機排序。

字典

36.字典操作中 del 和 pop 有什麼區別

答:pop()函式會返回刪除的值,而del()函式直接刪除元素,沒有返回值。

37.按照字典的內的年齡排序

d1 = [

{‘name’:‘alice’, ‘age’:38},

{‘name’:‘bob’, ‘age’:18},

{‘name’:‘Carl’, ‘age’:28},

]

答:d1.sort(key=lambda x: x[‘age’])

38.請合併下面兩個字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}

答:a.update(b)。

39.如何使用生成式的方式生成一個字典,寫一段功能程式碼。

答:這道題不能理解題目意思,暫時不答。

40.如何把元組(“a”,“b”)和元組(1,2),變為字典{“a”:1,“b”:2}

答:zip((“a”,“b”),(1,2))

綜合

41.Python 常用的資料結構的型別及其特性?

A:{1:0,2:0,3:0}

B:{“a”:0, “b”:0, “c”:0}

C: {(1,2):0, (2,3):0}

D: {[1,2]:0, [2,3]:0}

答:A為字典型別,無序key值不可重複,透過key值來取對應的value值。B也是字典型別,key值為string型別,也是透過dict[‘key’]的方式來取值。C也為字典型別,但key為元組

42.如何將元組(“A”,“B”)和元組(1,2),合併成字典{“A”:1,“B”:2}

答:dict(zip((“A”,“B”), (1,2)))即可。

43.Python 裡面如何實現 tuple 和 list 的轉換?

答:使用tuple()和list()函式實現轉換

44.我們知道對於列表可以使用切片操作進行部分元素的選擇,那麼如何對生成器型別的物件實現相同的功能呢?

答:使用自帶的itertools庫進行實現,具體實現方式 itertools.islice(生成器物件,起始位置,結束位置),即可實現切片功能。

45.請將[i for i in range(3)]改成生成器

答: iter(range(3))

46.a="hello"和 b="你好"編碼成 bytes 型別

答:a.encode()

47.下面的程式碼輸出結果是什麼?

a = (1,2,3,[4,5,6,7],8)

a[2] = 2

答:報錯,元組元素不支援修改。

48.下面的程式碼輸出的結果是什麼?

a = (1,2,3,[4,5,6,7],8)

a[5] = 2

答:報錯,列表看作是一個元素,5已經下標越界。

操作類題目

49.Python 交換兩個變數的值

答:語法糖 a, b = b, a。

50.在讀檔案操作的時候會使用 read、readline 或者 readlines,簡述它們各自的作用

答:read將整個文字都讀取為一個字串,佔用記憶體大,readline讀取為一個生成器,支援遍歷和迭代,佔用空間小。readlines將文字讀取為列表,佔用空間大。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2837163/,如需轉載,請註明出處,否則將追究法律責任。

相關文章