国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 深入解答關于Python的11道基本面試題

深入解答關于Python的11道基本面試題

2020-09-27 13:38菜鳥學Python Python

這篇文章主要介紹了關于Python的11道基本面試題,其中單引號,雙引號,三引號的區別、Python的參數傳遞是值傳遞還是引用傳遞以及什么是lambda函數?它有什么好處?等一系列的基礎面試題,文中給出了詳細的解答,需要的朋友可以

前言

本文給大家深入的解答了關于Python的11道基本面試題,通過這些面試題大家能對python進一步的了解和學習,下面話不多說,來看看詳細的介紹吧。

一、單引號,雙引號,三引號的區別

分別闡述3種引號用的場景和區別

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

比如:

  • 單引號:'python'
  • 雙引號:"python"

2).三引號

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

區別:

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

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

二、Python的參數傳遞是值傳遞還是引用傳遞

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

1).Python的參數傳遞有:

位置參數

默認參數,

可變參數,

關鍵字參數

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

a.不可變參數用值傳遞:

像整數和字符串這樣的不可變對象,是通過拷貝進行傳遞的,因為你無論如何都不可能在原處改變不可變對象

b.可變參數是用引用傳遞的

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

三、什么是lambda函數?它有什么好處?

舉例說明lambda的用法,并說明用lambda的優點

1).lambda的用法:

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

2).優點

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

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

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

五、Python是如何進行內存管理的

1).對象的引用計數機制

Python內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數。

引用計數增加的情況:

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

引用計數減少的情況:

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

2).垃圾回收

當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。

3).內存池機制

Python提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統:

  • Pymalloc機制:為了加速Python的執行效率,Python引入了一個內存池機制,用于管理對小塊內存的申請和釋放。
  • 對于Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說如果你分配又釋放了大量的整數,用于緩存這些整數的內存就不能再分配給浮點數。

六、寫一個函數, 輸入一個字符串, 返回倒序排列的結果

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

1).利用字符串本身的翻轉

?
1
2
3
def string_reverse1(text='abcdef'):
 
return text[::-1]

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

深入解答關于Python的11道基本面試題

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

深入解答關于Python的11道基本面試題

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

深入解答關于Python的11道基本面試題

5).遞歸

深入解答關于Python的11道基本面試題

七、按升序合并如下兩個list, 并去除重復的元素

?
1
2
3
list1 = [2, 3, 8, 4, 9, 5, 6]
 
list2 = [5, 6, 10, 17, 11, 2]

1).最簡單的方法用set

?
1
2
3
list3=list1+list2
 
print set(list3)

2).遞歸

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

深入解答關于Python的11道基本面試題

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

解答:

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

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

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

九、下面的代碼會不會報錯

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

不會報錯,而且會輸出一個 [],并且不會導致一個 IndexError

解答:

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

一個討厭的小問題是它會導致出現 bug ,并且這個問題是難以追蹤的,因為它在運行時不會引發錯誤,吐血啊~~

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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']

許多人會錯誤的認為 list1 應該等于 [10] 以及 list3 應該等于 ['a']。認為 list 的參數會在 extendList 每次被調用的時候會被設置成它的默認值 []。

盡管如此,實際發生的事情是,新的默認列表僅僅只在函數被定義時創建一次。隨后當 extendList 沒有被指定的列表參數調用的時候,其使用的是同一個列表。這就是為什么當函數被定義的時候,表達式是用默認參數被計算,而不是它被調用的時候。

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

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

深入解答關于Python的11道基本面試題

十一、寫出你認為最Pythonic的代碼

Pythonic編程風格是Python的一種追求的風格,精髓就是追求直觀,簡潔而容易讀.

下面是一些比較好的例子

1).交互變量

非Pythonic

?
1
2
3
4
5
temp = a
a = b
b = temp
pythonic:
a,b=b,a

2).判斷其值真假

?
1
2
3
4
5
6
7
8
9
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).列表推導式

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

4).zip創建鍵值對

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://ask.hellobi.com/blog/caoniao_xueyuan/7021

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: av一区二区在线观看 | 美国理论 | 亚洲精品电影在线一区 | 黄色免费看 | 一级黄免费看 | 成人国产免费视频 | 久久精品久久久 | 精品在线一区二区 | av网站免费看 | 国产毛片毛片 | 午夜资源 | 日韩精品一区二区三区在线观看 | 色玖玖综合 | 久久久久久久久久久久免费 | 一区二区三区国产在线 | 成人免费在线小视频 | 精品无码久久久久国产 | 免费精品视频 | 欧美一级二级三级 | 日韩精品小视频 | 欧美成在线观看 | 九九porny88av| 欧美婷婷 | 青青操天天干 | 久久久亚洲国产天美传媒修理工 | 免费毛片网站 | 国产麻豆一区二区三区 | 午夜看片| 一区视频 | 欧美一区在线观看视频 | 精品女同一区二区三区在线绯色 | 国产亚洲精品一区二区 | 国产欧美综合一区二区三区 | 久久夜色精品国产 | 9999777做爰| 自拍偷拍欧美 | 亚洲第一视频 | 动漫羞免费网站中文字幕 | 日韩精品一区二区三区在线播放 | 天天操天天拍 | 香蕉成人啪国产精品视频综合网 |