python爬虫面试问题及答案_关于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將文本讀取為列表,占用空間大。
總結
以上是生活随笔為你收集整理的python爬虫面试问题及答案_关于Python爬虫面试50道题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【集成学习系列教程5】LightGBM
- 下一篇: 给女友的网页小惊喜,(生日,周年,表白通