Python入門時候就會提到for循環,自然少不了range()。多數同學會一掠而過。面試過程中,偶爾也會有人問到range底層問題。那麼,今天我們來深入一下range。
首先,Python 2.7* 和 Python 3.*對range的解釋是不同的!(敲黑板…)
其次,在Python3.*中,range是一個類(class),不是一個函數!而在Python2.7.*裡面,range僅僅是一個函數。
默認的range(X) (x是一個整數),實際上調用的是range的構造方法。當然也可以更詳細一點兒range(start, end, [step])。Step步長不寫的話就是正整數「1」。
再次,由於Python2.7和Python3對range的不同解釋。資(bian)深(tai)考官問題就出來了:
請說出如下執行結果:
print (range(5))
print (type(range(5))
徘徊在牛A和牛C之間的面試者可以很自(gao)信(ao)地回答:這事情分情況!
如果Python 3.*,那麼range(x)直接出來的並不是一個列表(list)或者元祖(tuple)。
>>> print (range(5))
range(0, 5)
>>> print (type(range(5)))
<class 'range'>
如果是Python 2.7*,那麼很簡答就是list。
>>> print (range(5))
[0, 1, 2, 3, 4]
>>> print (type(range(5)))
<type 'list'>
上面的資(bian)深(tai)考題可以變形一下,問下面語句執行結果:
range(5) == [0,1,2,3,4]
那麼機智如同學們,能直接分而治之:Python2.7*結果是True;而Python3.*結果是False。畢竟class和function是不同的嘛。
最後,xrange只存在於Python2.*,在Python3.*裡合併進range()了。
人生苦短,我用Python!下次再見!
Testfan社區在今年正式上線了,大家可在社區交流分享技術經驗,並且有測試大牛答疑解惑
社區地址:http://ask.testfan.cn
Testfan為廣大測試人員提供技術交流群:
Selenium自動化測試群:197180340
接口測試開發群:521192806
Appium自動化測試:534129320
LoadRunner性能測試群:495447734
移動APP專項測試群:567341175
RobotFramework群:566755248
Testfan各個講師們,定時為大家帶來免費公開課
獲取連接:https://testfan.ke.qq.com/#tab=1&category=-1