最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解答關(guān)于Python的11道基本面試題

 更新時(shí)間:2017年04月01日 08:39:42   作者:菜鳥學(xué)Python  
這篇文章主要介紹了關(guān)于Python的11道基本面試題,其中單引號(hào),雙引號(hào),三引號(hào)的區(qū)別、Python的參數(shù)傳遞是值傳遞還是引用傳遞以及什么是lambda函數(shù)?它有什么好處?等一系列的基礎(chǔ)面試題,文中給出了詳細(xì)的解答,需要的朋友可以參考學(xué)習(xí)。

前言

本文給大家深入的解答了關(guān)于Python的11道基本面試題,通過這些面試題大家能對(duì)python進(jìn)一步的了解和學(xué)習(xí),下面話不多說,來看看詳細(xì)的介紹吧。

一、單引號(hào),雙引號(hào),三引號(hào)的區(qū)別

分別闡述3種引號(hào)用的場(chǎng)景和區(qū)別

1),單引號(hào)和雙引號(hào)主要用來表示字符串

比如:

  • 單引號(hào):'python'
  • 雙引號(hào):"python"

2).三引號(hào)

  • 三單引號(hào):'''python ''',也可以表示字符串一般用來輸入多行文本,或者用于大段的注釋
  • 三雙引號(hào):"""python""",一般用在類里面,用來注釋類,這樣省的寫文檔,直接用類的對(duì)象__doc__訪問獲得文檔

區(qū)別:

若你的字符串里面本身包含單引號(hào),必須用雙引號(hào)

比如: "can't find the log\n"

二、Python的參數(shù)傳遞是值傳遞還是引用傳遞

舉例說明Python函數(shù)參數(shù)傳遞的幾種形式,并說明函數(shù)傳參是值傳遞還是引用傳遞

1).Python的參數(shù)傳遞有:

位置參數(shù)

默認(rèn)參數(shù),

可變參數(shù),

關(guān)鍵字參數(shù)

2).函數(shù)的傳值到底是值傳遞還是引用傳遞,要分情況

a.不可變參數(shù)用值傳遞:

像整數(shù)和字符串這樣的不可變對(duì)象,是通過拷貝進(jìn)行傳遞的,因?yàn)槟銦o論如何都不可能在原處改變不可變對(duì)象

b.可變參數(shù)是用引用傳遞的

比如像列表,字典這樣的對(duì)象是通過引用傳遞,和C語言里面的用指針傳遞數(shù)組很相似,可變對(duì)象能在函數(shù)內(nèi)部改變.

三、什么是lambda函數(shù)?它有什么好處?

舉例說明lambda的用法,并說明用lambda的優(yōu)點(diǎn)

1).lambda的用法:

lambda是匿名函數(shù),用法如下:lambda arg1,arg2..argN:expression using args

2).優(yōu)點(diǎn)

lambda能和def做同樣種類的工作,特別是對(duì)于那些邏輯簡(jiǎn)單的函數(shù),直接用lambda會(huì)更簡(jiǎn)潔,而且省去取函數(shù)名的麻煩(給函數(shù)取名是個(gè)技術(shù)活)

四、字符串格式化:%和.format的區(qū)別

字符串的format函數(shù)非常靈活,很強(qiáng)大,可以接受的參數(shù)不限個(gè)數(shù),并且位置可以不按順序,而且有較為強(qiáng)大的格式限定符(比如:填充,對(duì)齊,精度等)

五、Python是如何進(jìn)行內(nèi)存管理的

1).對(duì)象的引用計(jì)數(shù)機(jī)制

Python內(nèi)部使用引用計(jì)數(shù),來保持追蹤內(nèi)存中的對(duì)象,所有對(duì)象都有引用計(jì)數(shù)。

引用計(jì)數(shù)增加的情況:

  • 一個(gè)對(duì)象分配一個(gè)新名稱
  • 將其放入一個(gè)容器中(如列表、元組或字典)

引用計(jì)數(shù)減少的情況:

  • 使用del語句對(duì)對(duì)象別名顯示的銷毀
  • 引用超出作用域或被重新賦值

2).垃圾回收

當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)歸零時(shí),它將被垃圾收集機(jī)制處理掉。

3).內(nèi)存池機(jī)制

Python提供了對(duì)內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng):

  • Pymalloc機(jī)制:為了加速Python的執(zhí)行效率,Python引入了一個(gè)內(nèi)存池機(jī)制,用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放。
  • 對(duì)于Python對(duì)象,如整數(shù),浮點(diǎn)數(shù)和List,都有私有內(nèi)存池,對(duì)象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。

六、寫一個(gè)函數(shù), 輸入一個(gè)字符串, 返回倒序排列的結(jié)果

輸入: string_reverse(‘abcdef’) , 返回: ‘fedcba’,寫出你能想到的多種方法

1).利用字符串本身的翻轉(zhuǎn)

def string_reverse1(text='abcdef'):

return text[::-1]

2).把字符串變成列表,用列表的reverse函數(shù)

3).新建一個(gè)列表,從后往前取

4).利用雙向列表deque中的extendleft函數(shù)

5).遞歸

七、按升序合并如下兩個(gè)list, 并去除重復(fù)的元素

list1 = [2, 3, 8, 4, 9, 5, 6]

list2 = [5, 6, 10, 17, 11, 2]

1).最簡(jiǎn)單的方法用set

list3=list1+list2

print set(list3)

2).遞歸

先選一個(gè)中間數(shù),然后一邊是小的數(shù)字,一邊是大的數(shù)字,然后再循環(huán)遞歸,排完序(是不是想起了c里面的冒泡)

八、以下的代碼的輸出將是什么? 說出你的答案并解釋

class Parent(object):
 x = 1
class Child1(Parent):
 pass
class Child2(Parent):
 pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
>>
1 1 1
1 2 1
3 2 3

解答:

使你困惑或是驚奇的是關(guān)于最后一行的輸出是 3 2 3 而不是 3 2 1。為什么改變了 Parent.x 的值還會(huì)改變 Child2.x 的值,但是同時(shí) Child1.x 值卻沒有改變?

這個(gè)答案的關(guān)鍵是,在 Python中,類變量在內(nèi)部是作為字典處理的。如果一個(gè)變量的名字沒有在當(dāng)前類的字典中發(fā)現(xiàn),將搜索祖先類(比如父類)直到被引用的變量名被找到.

  • 首先,在父類中設(shè)置 x = 1 會(huì)使得類變量 x 在引用該類和其任何子類中的值為 1。這就是因?yàn)榈谝粋€(gè) print 語句的輸出是 1 1 1
  • 然后,如果任何它的子類重寫了該值(例如,我們執(zhí)行語句 Child1.x = 2)該值僅僅在子類中被改變。這就是為什么第二個(gè) print 語句的輸出是 1 2 1
  • 最后,如果該值在父類中被改變(例如,我們執(zhí)行語句 Parent.x = 3),這個(gè)改變會(huì)影響到任何未重寫該值的子類當(dāng)中的值(在這個(gè)示例中被影響的子類是 Child2)。這就是為什么第三個(gè) print 輸出是 3 2 3

九、下面的代碼報(bào)錯(cuò)

list = ['a', 'b', 'c', 'd', 'e']
print list[10:]

不會(huì)報(bào)錯(cuò),而且會(huì)輸出一個(gè) [],并且不會(huì)導(dǎo)致一個(gè) IndexError

解答:

當(dāng)試圖訪問一個(gè)超過列表索引值的成員將導(dǎo)致 IndexError(比如訪問以上列表的 list[10])。盡管如此,試圖訪問一個(gè)列表的以超出列表長(zhǎng)度數(shù)作為開始索引的切片將不會(huì)導(dǎo)致 IndexError,并且將僅僅返回一個(gè)空列表

一個(gè)討厭的小問題是它會(huì)導(dǎo)致出現(xiàn) bug ,并且這個(gè)問題是難以追蹤的,因?yàn)樗谶\(yùn)行時(shí)不會(huì)引發(fā)錯(cuò)誤

十、說出下面list1,list2,list3的輸出值

def extendList(val, list=[]):
 list.append(val)
 return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3
>>
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

許多人會(huì)錯(cuò)誤的認(rèn)為 list1 應(yīng)該等于 [10] 以及 list3 應(yīng)該等于 ['a']。認(rèn)為 list 的參數(shù)會(huì)在 extendList 每次被調(diào)用的時(shí)候會(huì)被設(shè)置成它的默認(rèn)值 []。

盡管如此,實(shí)際發(fā)生的事情是,新的默認(rèn)列表僅僅只在函數(shù)被定義時(shí)創(chuàng)建一次。隨后當(dāng) extendList 沒有被指定的列表參數(shù)調(diào)用的時(shí)候,其使用的是同一個(gè)列表。這就是為什么當(dāng)函數(shù)被定義的時(shí)候,表達(dá)式是用默認(rèn)參數(shù)被計(jì)算,而不是它被調(diào)用的時(shí)候。

因此,list1 和 list3 是操作的相同的列表。而list2是操作的它創(chuàng)建的列表(通過傳遞它自己的空列表作為list參數(shù)的值)

所以這一點(diǎn)一定要切記切記.下面我們把list置為None就可以避免一些麻煩了

十一、寫出你認(rèn)為最Pythonic的代碼

Pythonic編程風(fēng)格是Python的一種追求的風(fēng)格,精髓就是追求直觀,簡(jiǎn)潔而容易讀.

下面是一些比較好的例子

1).交互變量

非Pythonic

temp = a
a = b
b = temp
pythonic:
a,b=b,a

2).判斷其值真假

name = 'Tim'
langs = ['AS3', 'Lua', 'C']
info = {'name': 'Tim', 'sex': 'Male', 'age':23 } 
非Pythonic
if name != '' and len(langs) > 0 and info != {}:
  print('All True!') 
pythonic:
if name and langs and info:
  print('All True!') 

3).列表推導(dǎo)式

[x for x in range(1,100) if x%2==0]

4).zip創(chuàng)建鍵值對(duì)

keys = ['Name', 'Sex', 'Age']
values = ['Jack', 'Male', 23]
dict(zip(keys,values))

pythonic的代碼很多,這里舉幾個(gè)典型的例子

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問題算法示例

    Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問題算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問題算法,涉及Python針對(duì)列表的遍歷、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python測(cè)試模塊doctest使用解析

    Python測(cè)試模塊doctest使用解析

    這篇文章主要介紹了Python測(cè)試模塊doctest使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 對(duì)python3 中方法各種參數(shù)和返回值詳解

    對(duì)python3 中方法各種參數(shù)和返回值詳解

    今天小編就為大家分享一篇對(duì)python3 中方法各種參數(shù)和返回值詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 利用django和mysql實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web登錄頁面

    利用django和mysql實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web登錄頁面

    這篇文章主要給大家介紹了關(guān)于如何利用django和mysql實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web登錄頁面的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Python2和3字符編碼的區(qū)別知識(shí)點(diǎn)整理

    Python2和3字符編碼的區(qū)別知識(shí)點(diǎn)整理

    在本篇文章中小編給各位分享的是關(guān)于Python2和3字符編碼的區(qū)別知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式

    python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式

    這篇文章主要介紹了python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Python 函數(shù)編編程的三大法寶map+filter+reduce分享

    Python 函數(shù)編編程的三大法寶map+filter+reduce分享

    這篇文章主要介紹了Python 函數(shù)編編程的三大法寶map,filter,reduce的分享,python利用 map 在一個(gè)可迭代對(duì)象的各項(xiàng)上調(diào)用函數(shù)的工具;利用 filter 來過濾項(xiàng);利用 reduce 把函數(shù)作用在成對(duì)的項(xiàng)上來運(yùn)行結(jié)果的工具,下面我們就來對(duì)這三者進(jìn)行詳細(xì)的介紹,需要的朋友可以參考下
    2022-03-03
  • python實(shí)現(xiàn)決策樹ID3算法的示例代碼

    python實(shí)現(xiàn)決策樹ID3算法的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)決策樹ID3算法的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 詳解如何使用Python的Plotly庫進(jìn)行交互式圖形可視化

    詳解如何使用Python的Plotly庫進(jìn)行交互式圖形可視化

    Python中有許多強(qiáng)大的工具和庫可用于創(chuàng)建交互式圖形,其中之一就是Plotly庫,Plotly庫提供了豐富的功能和靈活的接口,使得創(chuàng)建各種類型的交互式圖形變得簡(jiǎn)單而直觀,本文將介紹如何使用Plotly庫來創(chuàng)建交互式圖形,需要的朋友可以參考下
    2024-05-05
  • python實(shí)現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK

    python實(shí)現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK

    本文主要介紹了python實(shí)現(xiàn)多進(jìn)程并發(fā)控制Semaphore與互斥鎖LOCK,通過實(shí)例來介紹互斥鎖和進(jìn)程并發(fā)控制 semaphore的具體使用,感興趣的同學(xué)可以了解一下
    2021-05-05

最新評(píng)論

柞水县| 长宁县| 封丘县| 洪江市| 天台县| 奇台县| 丹凤县| 偏关县| 紫金县| 准格尔旗| 措勤县| 正安县| 仪征市| 新野县| 定安县| 辽宁省| 盘锦市| 祁门县| 瓦房店市| 南京市| 乐清市| 建阳市| 保靖县| 开江县| 新余市| 吉木乃县| 浦城县| 泰来县| 永修县| 江城| 托克逊县| 巴林右旗| 沙河市| 政和县| 昭通市| 巨野县| 敖汉旗| 雷州市| 吉木萨尔县| 慈溪市| 宣威市|