一、Q: 用Python輸出一個Fibonacci數列?(斐波那契額數列)
A:我們先來看下代碼
# !/usr/bin/env python # -*- coding: utf-8 -*- def fib_recur(n): if n <= 1 : return n return fib_recur(n - 1) + fib_recur(n - 2 ) for i in range(1, 20 ): print (fib_recur(i), end= " " )
我們來詳細的看一下代碼,我們知道斐波那契數據為1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,由此我們可以得知,
F(0) = 0
F(1) = 1,
F(2) = F(1) + F(0),
F(3) = F(2) + F(1),
F(4) = F(3) + F(2),
F(5) = F(4) + F(3)
所以我們可以得知F(n) = F(n-1) + F(n-2)。
二、Q:介紹一下Python中webbrowser的用法?
A:webbrowser主要是用來驅動瀏覽器進行操作的,最簡單的實例。
# !/usr/bin/env python # -*- coding: utf-8 -*- import webbrowser as ws ws.open( ' https://www.cnblogs.com/cxiaocai/ ' )
? ? webbrowser.open_new(url)
webbrowser.open_new_tab(url)
webbrowser.get()方法可以獲取到系統瀏覽器的操作對象。
三、Q:請寫出一段Python代碼實現刪除一個list里面的重復元素
# !/usr/bin/env python # -*- coding: utf-8 -*- def main(li): new_li = list(set(li)) new_li.sort(key = li.index) return new_li li = [1, 2, 4, 5, 8, 3, 1, 3, 8, 4 ] nli = main(li) for k in nli: print (k)
四、Q:簡單說一說python 中 is 和 == 的區別
A:最簡單的來說is是比較內存地址的,==是來比較值是否一致的,當我們is返回為True是,==一定是True,反而==為真時,is不一定是真,我們來看一個實例
# !/usr/bin/env python # -*- coding: utf-8 -*- import copy def main(): a = [1, 2, 3 ] b = copy.deepcopy(a) print (a) print (b) print (a == b) print (id(a)) print (id(b)) print (a is b) main()
由此看出,值相等的,但是is返回False,因為其值相等,內存不一定一致的。
注意:只有數值型和字符串型的情況下,a==b時,a is b才為True,當a和b是tuple,list,dict或set型時,a==b時,a is b不一定為True,這時我們需要判斷內存地址。
還有我們的None類型,我們也來看一下。None是一個特殊的常量,“不同的”None的id是一樣的。所有我們使用si比較好一些,而且is函數比==要快一些,不用運行查找和比較函數
五、Q:其實我們第四題內有一個隱含的問題,就是什么是可變對象,什么是不可變對象。
A:Python中有可變對象和不可變對象之分。可變對象創建后可改變但地址不會改變,即變量指向的還是原來的變量;不可變對象創建之后便不能改變,如果改變則會指向一個新的對象。
? Python中dict、list是可變對象,str、int、tuple、float是不可變對象。
六、Q:列表和元組有什么區別?
A:列表是可變的,即可以編輯。元祖是不可編輯的,元祖比列表的運行速度要快,
七:Q:說一說你理解的迭代器和生成器
A:生成器:如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出后續的元素呢?這樣就不必創建完整的list,從而節省大量的空間,在Python中,這種一邊循環一邊計算的機制,稱為生成器:generator。生成器是一個特殊的程序,可以被用作控制循環的迭代行為,python中生成器是迭代器的一種,使用yield返回值函數,每次調用yield會暫停,而可以使用next()函數和send()函數恢復生成器。那么這樣就不占內存了,這里說一下generator和函數的執行流程,函數是順序執行的,遇到return語句或者最后一行函數語句就返回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次被next()調用時候從上次的返回yield語句處急需執行,也就是用多少,取多少,不占內存。
? 迭代器:迭代器包含有next方法的實現,在正確的范圍內返回期待的數據以及超出范圍后能夠拋出StopIteration的錯誤停止迭代。
? 我們已經知道,可以直接作用于for循環的數據類型有以下幾種:
? 一類是集合數據類型,如list,tuple,dict,set,str等
? 一類是generator,包括生成器和帶yield的generator function
? ? ?這些可以直接作用于for 循環的對象統稱為可迭代對象:Iterable
? ? ? ? ? ?可以使用isinstance()判斷一個對象是否為可Iterable對象
? 總結:凡是可作用于
for
循環的對象都是
Iterable
類型;
??凡是可作用于
next()
函數的對象都是
Iterator
類型,它們表示一個惰性計算的序列;
? ?集合數據類型如
list
、
dict
、
str
等是
Iterable
但不是
Iterator
,不過可以通過
iter()
函數獲得一個
Iterator
對象。
八:Q: Python的解釋器種類和特點?
A: CPython, c語言開發的 使用最廣的解釋器(我們用的基本都是cpython); JPython, 運行在Java上的解釋器 直接把python代碼編譯成Java字節碼執行
九:Q:如何實現 “1,2,3” 變成 [‘1’,’2’,’3’] ?
A:
# !/usr/bin/env python # -*- coding: utf-8 -*- def main(): str = " 1, 2, 3 " return str.split( ' , ' ) if __name__ == ' __main__ ' : li = main() print (li) print (type(li))
十:Q:如何實現[‘1’,’2’,’3’]變成[1,2,3] ?
A:
# !/usr/bin/env python # -*- coding: utf-8 -*- def main(): li = [ ' 1 ' , ' 2 ' , ' 3 ' ] return [int(i) for i in li] if __name__ == ' __main__ ' : li = main() print (li) print (type(li))?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
