日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)

 豫龍晏子ylyz 2019-02-12

前言

之所以在這里寫下python爬蟲常見(jiàn)面試題及解答,

一是用作筆記,方便日后回憶;

二是給自己一個(gè)和大家交流的機(jī)會(huì),互相學(xué)習(xí)、進(jìn)步,希望不正之處大家能給予指正;

三是我也是互聯(lián)網(wǎng)寒潮下崗的那批人之一,為了找工作而做準(zhǔn)備。

一、題目部分

1、python中常用的數(shù)據(jù)結(jié)構(gòu)有哪些?請(qǐng)簡(jiǎn)要介紹一下。

python中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)有:列表(list),字典(dict),元組(tuple),字符串(string),集合(set),數(shù)字(int或long或float。。。)等。

其中,列表,元祖和字符串可以統(tǒng)一歸為序列類,即這三種數(shù)據(jù)結(jié)構(gòu)中的元素是有序的。比如,他們都有索引(下標(biāo))操作,還有切片、相加和長(zhǎng)度(len),最大值(max),最小值(min)操作。這是他們的共同點(diǎn)。

補(bǔ)充:python中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)可以統(tǒng)稱為容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的容器。

另外,關(guān)于這個(gè)問(wèn)題,面試官很容易引出另一個(gè)問(wèn)題:python中的哪些數(shù)據(jù)類型是可變的,哪些是不可變的?

首先,可變/不可變是針對(duì)該對(duì)象所指向的內(nèi)存中的值是否可變來(lái)判斷的。如可變類型的數(shù)據(jù)類型有列表和字典,還有集合不可變類型的數(shù)據(jù)類型有字符串,元組,數(shù)字。

就舉個(gè)最簡(jiǎn)單的數(shù)字的例子,python中有小整數(shù)池的概念,即[-5,256]范圍內(nèi)的整數(shù),python解釋器對(duì)他們做了特殊處理,都放在內(nèi)存中的固定位置,不會(huì)因?yàn)槟愕牟僮鞫l(fā)生變化。

現(xiàn)在:a = 1 ,然后我們又重新對(duì)a賦值,a = 2,在重新賦值的過(guò)程中,整數(shù)1所對(duì)應(yīng)的內(nèi)存地址沒(méi)有和數(shù)字的大小都沒(méi)有發(fā)生變化,還在內(nèi)存中的固定位置。整數(shù)2也是如此。變化的是a的指針(這里引用C中的概念)從指向數(shù)字1變成數(shù)字2。a對(duì)象指向的內(nèi)存中的值沒(méi)有發(fā)生變化,因此數(shù)字是不可變類型的數(shù)據(jù)類型。字符串,集合也是同理。

2、簡(jiǎn)要描述python中單引號(hào)、雙引號(hào)、三引號(hào)的區(qū)別。

首先,單引號(hào)和雙引號(hào)在使用時(shí)基本上沒(méi)有什么區(qū)別;

唯一需要注意的是:

當(dāng)字符串中有單引號(hào)時(shí),最好在外面使用雙引號(hào);

當(dāng)有雙引號(hào)時(shí),最好在外面使用單引號(hào)。

三引號(hào)一般不常用,除了用來(lái)做注釋之外,還可以用來(lái)打印多行字符串。特殊用途,是可以打印多行字符串。

3、如何在一個(gè)function里設(shè)置一個(gè)全局的變量。

先說(shuō)概念,全局變量是指定義在函數(shù)外部的變量。全局變量的作用域?yàn)槿帧?/strong>

局部變量是指定義在函數(shù)內(nèi)部的變量。局部變量的作用域?yàn)楹瘮?shù)內(nèi),除了函數(shù)就無(wú)效了。

這里舉個(gè)例子,如果把函數(shù)比作國(guó)家,那么全局就是全球,全局變量好比是阿拉伯?dāng)?shù)字,每個(gè)國(guó)家都認(rèn)識(shí)。

4、python里面如何拷貝一個(gè)對(duì)象?(賦值、淺拷貝、深拷貝的區(qū)別)

在python中如何拷貝一個(gè)對(duì)象是需要根據(jù)具體的需求來(lái)定的。

(1)賦值:其實(shí)就是對(duì)象的引用。相當(dāng)于C的指針,修改了其中一個(gè)對(duì)象,另一個(gè)跟著改變。注意對(duì)于不可變對(duì)象而言,如果修改了其中一個(gè)對(duì)象,就相當(dāng)于修改它的指針指向,另一個(gè)對(duì)象是不會(huì)跟著變化的。

(2)淺拷貝:拷貝父對(duì)象,但是不會(huì)拷貝父對(duì)象的子對(duì)象。(具體的方法有:b = copy.copy(a),切片如b = a[1:4])

(3)深拷貝:完全拷貝了父對(duì)象和子對(duì)象(具體的方法有:b = copy.deepcopy(a))

下面是圖解:

1、b = a:賦值引用,a 和 b 都指向同一個(gè)對(duì)象。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


2、b = a.copy():淺拷貝, a 和 b 是一個(gè)獨(dú)立的對(duì)象,但他們的子對(duì)象還是指向統(tǒng)一對(duì)象(是引用)。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


3、b = copy.deepcopy(a):深度拷貝, a 和 b 完全拷貝了父對(duì)象及其子對(duì)象,兩者是完全獨(dú)立的。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


總結(jié):

(1)當(dāng)對(duì)象為不可變類型時(shí),不論是賦值,淺拷貝還是深拷貝,那么改變其中一個(gè)值時(shí),另一個(gè)都是不會(huì)跟著變化的。

(2)當(dāng)對(duì)象為可變對(duì)象時(shí),如果是賦值和淺拷貝,那么改變其中任意一個(gè)值,那么另一個(gè)會(huì)跟著發(fā)生變化的;如果是深拷貝,是不會(huì)跟著發(fā)生改變的。

5、如果custname字符串的編碼格式為uft-8,如何將custname的內(nèi)容轉(zhuǎn)化為gb18030的字符串?

先將custname編碼格式轉(zhuǎn)換為unicode,在轉(zhuǎn)換為gb18030。即custname.decode('utf-8').encode('gb18030')。

注意:unicode編碼是一種二進(jìn)制編碼,是轉(zhuǎn)換編碼的中間橋梁。比如需要將utf-8轉(zhuǎn)換為gbk,那么就需要先轉(zhuǎn)換為unicode(decode),再轉(zhuǎn)為gbk(encode)。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


6、請(qǐng)寫出一段python代碼實(shí)現(xiàn)刪除list中的重復(fù)元素。

兩種方法:

(1)利用字典的fromkeys來(lái)自動(dòng)過(guò)濾重復(fù)值

(2)利用集合set的特性,元素是非重復(fù)的

方法一:

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


方法二:

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


7、這兩個(gè)參數(shù)是什么意思?args和 kwargs。

首先,我想說(shuō)的是*args和**kwargs并不是必須這樣寫,只有前面的*和**才是必須的。你可以寫成*var和**vars。而寫成*args和**kwargs只是約定俗稱的一個(gè)命名規(guī)定。

*args和**kwargs主要用于函數(shù)定義,你可以將不定量的參數(shù)傳遞給一個(gè)函數(shù)。其中,*args是用來(lái)發(fā)送一個(gè)非鍵值對(duì)的可變數(shù)量的參數(shù)列表給一個(gè)函數(shù);**kwargs允許你將不定長(zhǎng)度的鍵值對(duì), 作為參數(shù)傳遞給一個(gè)函數(shù)。 如果你想要在一個(gè)函數(shù)里處理帶名字的參數(shù), 你應(yīng)該使用**kwargs。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


這里傳遞了3個(gè)參數(shù),按位置傳參,'123'為test傳參,'hello'和'2019'為*args傳參,這里傳了2個(gè)參數(shù)。

注意,看下面的*args的另一種用法:用來(lái)解壓數(shù)據(jù)。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


這段代碼和上面的效果是一樣的,但是這里第8行的*args和第1行的*args可是不一樣的。第一行是表示函數(shù)可以接受不定數(shù)量的非鍵值對(duì)的參數(shù),用來(lái)傳參使用的。第八行是用來(lái)解壓列表

['hello', '2019']的每一項(xiàng)數(shù)據(jù)的,用來(lái)解壓參數(shù)的。這是*args的兩種用法,也可說(shuō)是*的兩種用法,因?yàn)閍rgs是可變的。

接下來(lái)說(shuō)說(shuō)**kwargs。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


**kwargs用來(lái)傳遞帶鍵值對(duì)的參數(shù),而**也是用來(lái)解壓字典容器內(nèi)的參數(shù)。

總結(jié):

*args和**kwargs都是用于函數(shù)中傳遞參數(shù)的,*args傳遞的是非鍵值對(duì)的參數(shù),**kwargs傳遞的是帶鍵值對(duì)的參數(shù),如果還有普通參數(shù)需要傳遞,那么應(yīng)該先傳遞普通的參數(shù)。

8、

(1)統(tǒng)計(jì)如下list單詞及其出現(xiàn)的次數(shù)。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


方法一:

利用字典。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


方法二:

利用python的collections包。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


(2)給列表中的字典排序:例如有如下list對(duì)象:

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


利用list的內(nèi)建函數(shù),list.sort()來(lái)進(jìn)行排序。

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


(3)寫出下列代碼的運(yùn)行結(jié)果

Python爬蟲基礎(chǔ)面試題為2019年初大學(xué)生就業(yè)做準(zhǔn)備(文末附教程)


第一段代碼的運(yùn)行結(jié)果為:1

分析,在函數(shù)外面定義了一個(gè)全局變量a為1,在函數(shù)內(nèi)部定義了一個(gè)局部變量a為2。局部變量在離開函數(shù)后就失效了。

所以,結(jié)果為全局變量的a的值。如果在a=2之前加上global a,聲明為全局變量,那么結(jié)果為2。

第二段代碼的運(yùn)行結(jié)果為:[1]

這是因?yàn)?,將a傳入到function中,這相當(dāng)于對(duì)a進(jìn)行賦值引用。由于a是可變類型的,所以在函數(shù)內(nèi)部修改a的時(shí)候,外部的全局變量a也跟著變化。

第三段代碼的運(yùn)行結(jié)果為:

Bob

Lily

Lily

最后,想學(xué)習(xí)Python的小伙伴們!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多