亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Python自動化運維 | 11道Python基本面試題|深入解答

今天的分享主題是十一道Python自動化運維面試題,對于所有有志于從事相關職業(yè)的人來說,是必須具備、必須懂得內(nèi)容。

1單引號,雙引號,三引號的區(qū)別

分別闡述3種引號用的場景和區(qū)別

比如:

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

2).三引號

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

區(qū)別:

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

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

2Python的參數(shù)傳遞是值傳遞還是引

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

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

位置參數(shù)

默認參數(shù),

可變參數(shù),

關鍵字參數(shù)

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

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

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

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

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

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

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

1).lambda的用法:

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

2).優(yōu)點

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

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

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

5Python是如何進行內(nèi)存管理的

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

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

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

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

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

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

2).垃圾回收

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

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

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

  • Pymalloc機制:為了加速Python的執(zhí)行效率,Python引入了一個內(nèi)存池機制,用于管理對小塊內(nèi)存的申請和釋放。
  • 對于Python對象,如整數(shù),浮點數(shù)和List,都有其獨立的私有內(nèi)存池,對象間不共享他們的內(nèi)存池。也就是說如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點數(shù)。
6寫一個函數(shù), 輸入一個字符串, 返回倒序排列的結(jié)果

輸入: string_reverse(‘a(chǎn)bcdef’), 返回: ‘fedcba’,寫出你能想到的多種方法

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

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

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

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

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

5).遞歸

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

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

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

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

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

解答:

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

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

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

list = ['a', 'b', 'c', 'd', 'e']

print list[10:]

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

解答:

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

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

10說出下面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] 以及 list3 應該等于 ['a']。認為 list 的參數(shù)會在 extendList 每次被調(diào)用的時候會被設置成它的默認值 []。

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

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

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

11寫出你認為最Pythonic的代碼

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

下面是一些比較好的例子

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).列表推導式

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

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

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

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

來源:菜鳥學Python

相關新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡安全、云原生、Go、Python開發(fā)專業(yè)人才培訓機構(gòu)!