介紹
????如果你在尋找python工作匠童,那你的面試可能會涉及Python相關(guān)的問題巩趁。通過對網(wǎng)絡(luò)資料的收集整理栈幸,本文列出了100道python的面試題以及答案,你可以根據(jù)需求閱讀測試嵌牺。
python基礎(chǔ)
Q1.什么是Python打洼?
A1.Python是一種面向?qū)ο蟮模换ナ降哪娲猓忉屝偷挠嬎銠C(jī)程序設(shè)計語言募疮。Python的設(shè)計具有高可讀性,它使用英語關(guān)鍵詞而非標(biāo)點(diǎn)符號枯饿,語法結(jié)構(gòu)也比其他語言簡單酝锅。
Q2.Python的主要功能是什么诡必?
1)python是一種解釋型語言奢方,因此在使用python時不需要進(jìn)行編譯
2)聲明變量和類似變量時,不需要重復(fù)聲明變量的類型爸舒;
3)Python非常適合面向?qū)ο蟮木幊腆郑驗(yàn)樗试S類的定義以及組合和繼承;
4)函數(shù)是第一類對象扭勉,這意味著它們可以分配給變量鹊奖,從其他函數(shù)返回并傳遞給函數(shù),類也是第一類對象涂炎;
5)用于許多領(lǐng)域忠聚,包括Web應(yīng)用程序设哗,自動化,科學(xué)建模两蟀,大數(shù)據(jù)應(yīng)用程序等等网梢。
Q3.Python中支持的數(shù)據(jù)類型有哪些?
Python支持5種數(shù)據(jù)類型:
1)Numbers(數(shù)字)——用于保存數(shù)值赂毯;
a=7.0
2)Strings(字符串)——字符串是一個字符序列战虏,我們用單引號或雙引號來聲明字符串;
title="Data123"
3)Lists(列表)——列表就是一些值的有序集合党涕,我們用方括號聲明列表烦感;
colors=['red','green','blue']
4)tuples(元組)——元組和列表一樣,也是一些值的有序集合膛堤,區(qū)別是元組是不可變的手趣,意味著我們無法改變元組內(nèi)的值。
(1,2,3,abc)
5)Dictionary(字典)——字典(dictionary)是除列表以外Python之中最靈活的內(nèi)置數(shù)據(jù)結(jié)構(gòu)類型肥荔。
tinydict = {'name':'john','code':5762,'dept':'sales'}
列表是有序的對象結(jié)合回懦,字典是無序的對象集合。
兩者之間的區(qū)別在于:字典當(dāng)中的元素是通過鍵來存取的次企,而不是通過偏移存取怯晕。
字典用"{ }"標(biāo)識。字典由索引(key)和它對應(yīng)的值value組成缸棵。
Q4.列表和元組有什么區(qū)別舟茶?
Q5.什么是Python模塊?
A5.模塊是一個Python腳本堵第,通常包含import語句吧凉,函數(shù),類和變量定義踏志,以及Python可運(yùn)行代碼阀捅,文件的擴(kuò)展名為“.py”。
Q6.python解釋器種類以及特點(diǎn)针余?
CPython:這個解釋器是用C語言開發(fā)的饲鄙,所以叫 CPython,在命名行下運(yùn)行python圆雁,就是啟動CPython解釋器忍级,CPython是使用最廣的Python解釋器;
IPython:IPython是基于CPython之上的一個交互式解釋器伪朽,也就是說轴咱,IPython只是在交互方式上有所增強(qiáng);
PyPy:PyPy是另一個Python解釋器,它的目標(biāo)是執(zhí)行速度朴肺,PyPy采用JIT技術(shù)窖剑,對Python代進(jìn)行動態(tài)編譯,所以可以顯著提高Python代碼的執(zhí)行速度戈稿;
Jython:Jython是運(yùn)行在Java平臺上的Python解釋器苛吱,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。
IronPython:IronPython和Jython類似器瘪,只不過IronPython是運(yùn)行在微軟.Net平臺上的Python解釋器翠储,可以直接把Python代碼編譯成.Net的字節(jié)碼。
Q7.什么是Python切片橡疼?
A7.Python中符合序列的有序序列都支持切片(slice)援所,如:列表,字符,元祖
Python中切片的格式:[start : end : step]
Start:起始索引,從0開始,-1表示結(jié)束;End:結(jié)束索引欣除;Step:步長
end-start=正數(shù)時,從左向右取值,=負(fù)數(shù)時反向取值
注意:切片結(jié)果不包含結(jié)束索引,即不包含最后一位,-1代表最后一個位置索引
str1 = 'abcdefghijklmnopqrstuvwxyz'
>>>str1[2:6]? ? ? ? ? ? ? ? ????????????//'cdef'
Q8.Python中的%S是什么住拭?
A8.Python支持將值格式化為字符串。雖然這可以包括非常復(fù)雜的表達(dá)式历帚,但最基本的用法是將值插入到%s 占位符的字符串中 滔岳。
name = raw_input("who are you?")
print "hello %s" % (name,)
Q9.Python編程中的函數(shù)是什么?
函數(shù)是表示代碼塊并且是可重用實(shí)體的對象挽牢。
它為程序帶來了模塊化谱煤,并提供了更高程度的代碼可重用性。
Python為我們提供了許多內(nèi)置函數(shù)禽拔,例如print()等刘离,并提供了創(chuàng)建用戶定義函數(shù)的能力。
Q10.Python中有多少基本類型的函數(shù)可用睹栖?
Python為我們提供了兩種基本類型的函數(shù):內(nèi)置和用戶定義硫惕。
內(nèi)置函數(shù)是Python語言的一部分,比如print()野来,dir()恼除,len()和abs()等。
Q11.我們?nèi)绾斡肞ython編寫函數(shù)曼氛?
我們可以通過以下方式創(chuàng)建Python函數(shù)豁辉。
1)用def定義函數(shù)并鏈接功能名稱;
2)傳遞參數(shù)并使用括號將它們括起來搪锣,使用冒號來表示結(jié)尾秋忙;
3)添加所需的Python語句以供執(zhí)行。
Q12.深拷貝和淺拷貝有什么區(qū)別构舟?
深拷貝就是將一個對象拷貝到另一個對象中,這意味著如果你對一個對象的拷貝做出改變時,不會影響原對象狗超。而淺拷貝則是將一個對象的引用拷貝到另一個對象上弹澎,所以如果我們在拷貝中改動,會影響到原對象努咐。詳情可參考我的上一篇文章苦蒿,有詳細(xì)說明。鏈接??
Q13.Python中的函數(shù)調(diào)用或可調(diào)用對象是什么渗稍?
Python中的函數(shù)被視為可調(diào)用對象佩迟。它可以允許一些參數(shù),并以元組的形式返回一個值或多個值竿屹。除了函數(shù)之外报强,Python還有其他構(gòu)造,例如類或適合同一類別的類實(shí)例拱燃。
Q14.Python中Pass和Continue有什么區(qū)別秉溉?
continue語句使循環(huán)從下一次迭代中恢復(fù)。pass語句指示什么都不做碗誉,代碼的其余部分像往常一樣執(zhí)行召嘶。
Q15. PYTHONPATH環(huán)境變量的目的是什么?
PYTHONPATH - 它的作用類似于PATH哮缺。此變量告訴Python解釋器在何處找到導(dǎo)入程序的模塊文件弄跌。它應(yīng)該包括Python源庫目錄和包含Python源代碼的目錄。PYTHONPATH有時由Python安裝程序預(yù)設(shè)尝苇。
Q16.PYTHONSTARTUP碟绑,PYTHONCASEOK,PYTHONHOME茎匠,PYTHONSTARTUP環(huán)境變量的目的是什么格仲?
PYTHONSTARTUP - 它包含一個包含Python源代碼的初始化文件的路徑。每次啟動解釋器時都會執(zhí)行它诵冒。它在Unix中命名為.pythonrc.py凯肋,它包含加載實(shí)用程序或修改PYTHONPATH的命令。
PYTHONCASEOK - 在Windows中用于指示Python在import語句中查找第一個不區(qū)分大小寫的匹配項汽馋。將此變量設(shè)置為任何值以激活它侮东。
PYTHONHOME - 它是另一種模塊搜索路徑。它通常嵌入在PYTHONSTARTUP或PYTHONPATH目錄中豹芯,以便于切換模塊庫悄雅。
Q17.如何在Python中實(shí)現(xiàn)多線程?
python主要是通過thread和threading這兩個模塊來實(shí)現(xiàn)多線程支持铁蹈。
python的thread模塊是比較底層的模塊宽闲,python的threading模塊是對thread做了一些封裝,可以更加方便的被使用。但是python(cpython)由于GIL的存在無法使用threading充分利用CPU資源容诬,如果想充分發(fā)揮多核CPU的計算能力需要使用multiprocessing模塊(Windows下使用會有諸多問題)娩梨。
python3.x中已經(jīng)摒棄了Python2.x中采用函數(shù)式thread模塊中的start_new_thread()函數(shù)來產(chǎn)生新線程方式。python3.x中通過threading模塊創(chuàng)建新的線程有兩種方法:
1)通過threading.Thread(Target=executable Method)-即傳遞給Thread對象一個可執(zhí)行方法(或?qū)ο螅?/p>
2)繼承threading.Thread定義子類并重寫run()方法览徒。第二種方法中狈定,唯一必須重寫的方法是run()。
Q18.如何在python中使用三元運(yùn)算符习蓬?
Ternary運(yùn)算符是用于顯示條件語句的運(yùn)算符纽什。這包含true或false值,并且必須為其評估語句躲叼。
三元運(yùn)算符將被給出為:
[on_true] if [expression] else [on_false] ????
x芦缰,y = 25,50?
big =x if x <y else y
表達(dá)式的計算方式與x <y else y一樣,在這種情況下押赊,如果x <y為真饺藤,則返回值為big = x,如果不正確則返回big = y作為結(jié)果流礁。
Q19.什么是Tkinter 涕俗?
TKinter是一款很知名的Python庫,用它我們可以制作圖形用戶界面神帅。其支持不同的GUI工具和窗口構(gòu)件再姑,比如按鈕、標(biāo)簽找御、文本框等等元镀。這些工具和構(gòu)件均有不同的屬性,比如維度霎桅、顏色栖疑、字體等。
Q20.Python中的繼承
繼承允許一個類獲得另一個類的所有成員(比如屬性和方法)滔驶。繼承提供代碼可重用性遇革,使創(chuàng)建和維護(hù)應(yīng)用程序更容易。
Python支持的不同類型的繼承:
1)單一繼承 - 派生類獲取單個超類的成員揭糕;
2)多級繼承 - 從基類base1繼承的派生類d1萝快,d2繼承自base2;
3)分層繼承 - 從一個基類可以繼承任意數(shù)量的子類著角;
4)多重繼承 - 派生類從多個基類繼承揪漩。
Q21.請談?wù)?pyc文件和.py文件的不同之處
雖然這兩種文件均保存字節(jié)代碼,但.pyc文件是Python文件的編譯版本吏口,它有平臺無關(guān)的字節(jié)代碼奄容,因此我們可以在任何支持.pyc格式文件的平臺上執(zhí)行它冰更。
Q22.什么是酸洗和去除?
Pickle模塊接受任何Python對象并將其轉(zhuǎn)換為字符串表示形式嫩海,并使用dump函數(shù)將其轉(zhuǎn)儲到文件中冬殃,此過程稱為pickling囚痴。從存儲的字符串表示中檢索原始Python對象的過程稱為unpickling叁怪。
Q23.在Python中命名與文件相關(guān)的模塊?
Python為庫/模塊提供了一些函數(shù)深滚,你可以在文件系統(tǒng)上操作文本文件和二進(jìn)制文件奕谭。使用它們完成創(chuàng)建文件,更新內(nèi)容痴荐,復(fù)制和刪除文件的操作血柳。這些庫是:os,os.path和shutil生兆。
Q24.解釋使用with聲明难捌?
在python中,通逞荒眩“with”語句用于打開文件根吁,處理文件中存在的數(shù)據(jù),還可以在不調(diào)用close()方法的情況下關(guān)閉文件合蔽。
Q25.解釋Python支持的所有文件處理模式击敌?
Python中可以使用三種方法打開文件。他們是:
1)通過分別指定標(biāo)志“r”拴事,“w”沃斤,“rw”,“a”刃宵,只讀模式衡瓶,只寫模式,讀寫模式和附加模式;
2)通過指定選項“t”牲证,可以在上述任何一種模式中打開文本文件;
3)“r”哮针,“w”,“rw”和“a”从隆,以便前面的模式變?yōu)椤皉t”诚撵,“wt”,“rwt”和“at”键闺。二進(jìn)制文件可以在任何一個中打開上述模式通過指定選項“b”以及“r”寿烟,“w”,“rw”和“a”使得前面的模式為“rb”辛燥,“wb”筛武,“rwb”缝其,“ab”。
Q26. Python支持多少種序列徘六?
Python支持7種序列類型内边。它們是str,list待锈,tuple漠其,unicode,byte array竿音,xrange和buffer和屎。其中xrange在python 3.5.X中已棄用。
Q27.如何在Python中執(zhí)行模式匹配春瞬?
正則表達(dá)式(RE)使我們能夠指定匹配給定字符串的特定“部分”的表達(dá)式柴信。例如,我們可以定義一個正則表達(dá)式來匹配單個字符或數(shù)字宽气,電話號碼或電子郵件地址等.Python的“re”模塊提供正則表達(dá)式模式随常,并從Python 2.5的更高版本中引入√蜒模“re”模塊提供搜索文本字符串的方法绪氛,或者替換文本字符串以及基于定義的模式拆分文本字符串的方法。
Q28.Python如何處理內(nèi)存管理窃判?
Python內(nèi)存由Python私有堆空間管理钞楼。所有Python對象和數(shù)據(jù)結(jié)構(gòu)都位于私有堆中。程序員無權(quán)訪問此私有堆袄琳,解釋器負(fù)責(zé)處理此私有堆询件。Python對象的Python堆空間分配由Python內(nèi)存管理器完成。核心API提供了一些程序員編寫代碼的工具唆樊。Python還有一個內(nèi)置的垃圾收集器宛琅,它可以回收所有未使用的內(nèi)存并釋放內(nèi)存并使其可用于堆空間。
Q29.如何以相反的順序顯示文本文件的內(nèi)容逗旁?
1)將給定文件轉(zhuǎn)換為列表????2)使用reverse()函數(shù)反轉(zhuǎn)列表嘿辟。
Q30.什么是負(fù)索引
Python序列可以是正數(shù)和負(fù)數(shù)的索引。對于正索引片效,0是第一個索引红伦,1是第二個索引,依此類推淀衣。對于負(fù)索引昙读,( - 1)是最后一個索引,( - 2)是倒數(shù)第二個索引膨桥,依此類推蛮浑。
Q31.解釋Python中“re”模塊的split()唠叛,sub(),subn()方法沮稚。
為了修改字符串艺沼,Python的“re”模塊提供了3種方法。
1)split() - 使用正則表達(dá)式模式將給定字符串“拆分”到列表中蕴掏;
2)sub() - 查找正則表達(dá)式模式匹配的所有子字符串障般,然后用不同的字符串替換它們;
3)subn() - 它類似于sub()囚似,并且還返回新字符串和no剩拢。替換线得。
Q32.解釋Python Flask中的數(shù)據(jù)庫連接
Flask支持?jǐn)?shù)據(jù)庫驅(qū)動的應(yīng)用程序(RDBS)饶唤。Flask允許以三種方式請求數(shù)據(jù)庫
1)before_request():在請求之前調(diào)用它們并且不傳遞任何參數(shù)
2)after_request():在請求后調(diào)用它們并傳遞將發(fā)送到客戶端的響應(yīng)
3)teardown_request():在引發(fā)異常時調(diào)用它們,并且不保證響應(yīng)贯钩。它們在響應(yīng)構(gòu)建后被調(diào)用募狂。不允許他們修改請求,并忽略它們的值角雷。
Q33. range和xrange有什么區(qū)別祸穷?
在大多數(shù)情況下,xrange和range在功能方面完全相同勺三,它們都提供了一種生成整數(shù)列表的方法雷滚。唯一的區(qū)別是range返回一個Python列表對象,x range返回一個xrange對象吗坚。
Q34.Python中的“按值調(diào)用”是什么祈远?
在call-by-value中,表達(dá)式或值是否綁定到函數(shù)中的相應(yīng)變量的參數(shù)商源。Python會將該變量視為函數(shù)級范圍中的本地變量车份。對該變量所做的任何更改都將保留在本地,并且不會反映在該函數(shù)之外牡彻。
Q35.什么是Python中的“按引用調(diào)用”扫沼?
我們可以互換地使用“引用調(diào)用”和“引用傳遞”。當(dāng)我們通過引用傳遞參數(shù)時庄吼,它可以作為函數(shù)的隱式引用缎除,而不是簡單的副本。在這種情況下总寻,對參數(shù)的任何修改也將對調(diào)用者可見器罐。
該方案還具有帶來更多時間和空間效率的優(yōu)點(diǎn),因?yàn)樗粝铝藙?chuàng)建本地副本的需要废菱。相反技矮,缺點(diǎn)可能是函數(shù)調(diào)用期間變量可能會意外更改抖誉。
Q36.Lambda和Def之間的主要區(qū)別是什么?
當(dāng)lambda是uni-expression函數(shù)時衰倦,Def可以包含多個表達(dá)式袒炉。Def生成一個函數(shù)并指定一個名稱以便稍后調(diào)用它。Lambda形成一個函數(shù)對象并返回樊零。Def可以有一個return語句我磁。Lambda不能有return語句。Lambda支持在列表和字典中使用驻襟。
Q37.ascii夺艰、unicode、utf-8沉衣、gbk 區(qū)別郁副?
ASCII碼:使用一個字節(jié)編碼,所以它的范圍基本是只有英文字母豌习、數(shù)字和一些特殊符號 存谎,只有256個字符;
Unicode:能夠表示全世界所有的字節(jié);
GBK:是只用來編碼漢字的,GBK全稱《漢字內(nèi)碼擴(kuò)展規(guī)范》肥隆,使用雙字節(jié)編碼;
UTF-8:是一種針對Unicode的可變長度字符編碼既荚,又稱萬國碼。
Q38.每當(dāng)Python退出時栋艳,為什么不是所有的內(nèi)存都被解除分配恰聘?
每當(dāng)python退出時,尤其是那些對其他對象具有循環(huán)引用的Python模塊或者從全局名稱空間引用的對象并不總是被解除分配或釋放吸占。由于python擁有自己的高效清理機(jī)制晴叨,無法解除分配保留的那些內(nèi)存部分會在退出時嘗試取消分配/銷毀其他所有對象。
Q 39.解釋Python的參數(shù)傳遞機(jī)制
Python使用按引用傳遞(pass-by-reference)將參數(shù)傳遞到函數(shù)中旬昭。如果你改變一個函數(shù)內(nèi)的參數(shù)篙螟,會影響到函數(shù)的調(diào)用。這是Python的默認(rèn)操作问拘。不過遍略,如果我們傳遞字面參數(shù),比如字符串骤坐、數(shù)字或元組绪杏,它們是按值傳遞,這是因?yàn)樗鼈兪遣豢勺兊摹?/p>
Q41.大數(shù)據(jù)的文件讀取
1纽绍、利用生成器generator? ? ? ????或? ????2蕾久、使用迭代器進(jìn)行迭代遍歷:for line in file
Q42.find和grep
grep命令是一種強(qiáng)大的文本搜索工具,grep搜索內(nèi)容串可以是正則表達(dá)式拌夏,允許對文本文件進(jìn)行模式查找僧著。如果找到匹配模式履因,grep打印包含模式的所有行。find通常用來再特定的目錄下搜索符合條件的文件盹愚,也可以用來搜索特定用戶屬主的文件栅迄。
Q44.如何提高python的運(yùn)行效率
使用生成器;關(guān)鍵代碼使用外部功能包(Cython皆怕,pylnlne毅舆,pypy,pyrex)愈腾;針對循環(huán)的優(yōu)化--盡量避免在循環(huán)中訪問變量的屬性
Q45.如何在Python中刪除文件憋活?
使用命令os.remove(filename)或os.unlink(filename)
Q46.Python中的yield用法
yield簡單說來就是一個生成器,這樣函數(shù)它記住上次返 回時在函數(shù)體中的位置虱黄。對生成器第 二次(或n 次)調(diào)用跳轉(zhuǎn)至該函 次)調(diào)用跳轉(zhuǎn)至該函數(shù)悦即。
Q47.描述數(shù)組、鏈表礁鲁、隊列盐欺、堆棧的區(qū)別?
數(shù)組與鏈表是數(shù)據(jù)存儲方式的概念仅醇,數(shù)組在連續(xù)的空間中存儲數(shù)據(jù),而鏈表可以在非連續(xù)的空間中存儲數(shù)據(jù)魔种;隊列和堆棧是描述數(shù)據(jù)存取方式的概念析二,隊列是先進(jìn)先出,而堆棧是后進(jìn)先出节预;隊列和堆椧渡悖可以用數(shù)組來實(shí)現(xiàn),也可以用鏈表實(shí)現(xiàn)安拟。
Q48.如何使用我已經(jīng)知道的URL地址本地保存圖像蛤吓?
將使用以下代碼從URL地址本地保存圖像:
import urllib.request
urllib.request.urlretrieve("URL地址", "local-filename.jpg")
Q49.請解釋使用*args和*kwargs的含義
當(dāng)我們不知道向函數(shù)傳遞多少參數(shù)時,比如我們向傳遞一個列表或元組糠赦,我們就使用*args:
args会傲。它表示可以接收任意數(shù)量的位置參數(shù),這些參數(shù)在函數(shù)內(nèi)部被封裝為一個元組拙泽。當(dāng)使用 *args 時淌山,它必須位于函數(shù)定義的參數(shù)列表的開始部分,因?yàn)槲恢脜?shù)位于關(guān)鍵字參數(shù)之前顾瞻。
def func(*args):
? for i in args:
? ? ? print(i)?
func(3,2,1,4,7)
3
2
1
4
7
在我們不知道該傳遞多少關(guān)鍵字參數(shù)時泼疑,使用**kwargs來收集關(guān)鍵字參數(shù):
它表示可以接收任意數(shù)量的關(guān)鍵字參數(shù),這些參數(shù)在函數(shù)內(nèi)部被封裝為一個字典荷荤。kwargs 允許函數(shù)調(diào)用時傳遞不定數(shù)量的退渗、帶名稱的參數(shù)移稳。
def func(**kwargs):
? for i in kwargs:
? ? ? print(i,kwargs[i])
func(a=1,b=2,c=7)
a.1
b.2
c.7
Q50.解釋如何從C訪問用Python編寫的模塊?
您可以通過以下方法訪問C中用Python編寫的模塊:
Module = = PyImport_ImportModule(“<modulename>”)
Q51.如何用Python輸出一個Fibonacci數(shù)列?
a,b = 0, 1
while b<100:
print (b)
a, b = b, a+b
Q52.在Python中怎樣將字符串轉(zhuǎn)換為整型變量会油?
如果字符串只含有數(shù)字字符秒裕,可以用函數(shù)int()將其轉(zhuǎn)換為整數(shù)。
int('22')
Q53.在Python中如何生成一個隨機(jī)數(shù)钞啸?
要想生成隨機(jī)數(shù)几蜻,我們可以從random模塊中導(dǎo)入函數(shù)random()。
from random import random
random()
0.013501571090371978
我們還可以使用函數(shù)randint()体斩,它會用兩個參數(shù)表示一個區(qū)間梭稚,返回該區(qū)間內(nèi)的一個隨機(jī)整數(shù)。
from random import randint
randint(2,7)
4
Q54.怎樣將字符串中第一個字母大寫絮吵?
最簡單的方法就是用capitalize()方法弧烤。
'daxie'.capitalize()
'Daxie'
Q55.如何檢查字符串中所有的字符都為字母數(shù)字?
對于這個問題蹬敲,我們可以使用isalnum()方法暇昂。
'DATA123'.isalnum()
True
'DATA123!'.isalnum()
False
我們還可以用其它一些方法:
'123'.isdigit()#檢測字符串是否只由數(shù)字組成
True
'123'.isnumeric()#只針對unicode對象
True
'data'.islower()#是否都為小寫
True
'Data'.isupper()#是否都為大寫
False
Q56.什么是生成器?
生成器會生成一系列的值用于迭代伴嗡,這樣看它又是一種可迭代對象急波。它是在for循環(huán)的過程中不斷計算出下一個元素,并在適當(dāng)?shù)臈l件結(jié)束for循環(huán)瘪校。我們定義一個能逐個“yield”值的函數(shù)澄暮,然后用一個for循環(huán)來迭代它。
def squares(n):
? i=1
? while(i<=n):
? ? ? yield i**2
? ? ? i+=1
for i in squares(5):
? print(i)
1
4
9
16
25
Q57.什么是迭代器阱扬?
迭代器是訪問集合元素的一種方式泣懊。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結(jié)束麻惶。迭代器只能往前不會后退馍刮。我們使用inter()函數(shù)創(chuàng)建迭代器。
odds=iter([1,2,3,4,5])#每次想獲取一個對象時窃蹋,我們就調(diào)用next()函數(shù)
next (odds)
1
next (odds)
2
next (odds)
3
next (odds)
4
next (odds)
5
Q58.請說說生成器和迭代器之間的區(qū)別
1)在使用生成器時卡啰,我們創(chuàng)建一個函數(shù);在使用迭代器時脐彩,我們使用內(nèi)置函數(shù)iter()和next()碎乃;
2)在生成器中,我們使用關(guān)鍵字‘yield’來每次生成/返回一個對象惠奸;
3)生成器中有多少‘yield’語句梅誓,你可以自定義;
4)每次‘yield’暫停循環(huán)時,生成器會保存本地變量的狀態(tài)梗掰。而迭代器并不會使用局部變量嵌言,它只需要一個可迭代對象進(jìn)行迭代;
5)使用類可以實(shí)現(xiàn)你自己的迭代器及穗,但無法實(shí)現(xiàn)生成器摧茴;
6)生成器運(yùn)行速度快,語法簡潔埂陆,更簡單苛白;
7)迭代器更能節(jié)約內(nèi)存。
Q59.函數(shù)zip()的是干嘛的焚虱?
zip()可以返回元組的迭代器购裙,如下:
list(zip(['a','b','c'],[1,2,3]))
[(‘a(chǎn)’,1), (‘b’, 2), (‘c’, 3)]
Q60.如何從列表中刪除最后一個對象?
從列表中刪除并返回最后一個對象或obj鹃栽。
list.pop(obj = list [-1])
Django有關(guān)
Q61.請解釋或描述一下Django的架構(gòu)
對于Django框架遵循MVC設(shè)計躏率,并且有一個專有名詞:MVT,M全拼為Model民鼓,與MVC中的M功能相同薇芝,負(fù)責(zé)數(shù)據(jù)處理,內(nèi)嵌了ORM框架丰嘉;V全拼為View夯到,與MVC中的C功能相同,接收HttpRequest供嚎,業(yè)務(wù)處理黄娘,返回HttpResponse;T全拼為Template克滴,與MVC中的V功能相同,負(fù)責(zé)封裝構(gòu)造要返回的html优床,內(nèi)嵌了模板引擎
Q62.Django劝赔,Pyramid和Flask之間的差異
Flask是一個“微框架”,主要用于具有更簡單要求的小型應(yīng)用程序胆敞。Pyramid適用于大型應(yīng)用程序着帽,具有靈活性,允許開發(fā)人員為他們的項目使用數(shù)據(jù)庫移层,URL結(jié)構(gòu)仍翰,模板樣式等正確的工具。Django也可以像Pyramid一樣用于更大的應(yīng)用程序观话。它包括一個ORM予借。
Q63.討論Django架構(gòu)
開發(fā)人員提供模型,視圖和模板,然后將其映射到URL灵迫,Django可以為用戶提供服務(wù)秦叛。
Q64.解釋如何在Django中設(shè)置數(shù)據(jù)庫
Django使用SQLite作為默認(rèn)數(shù)據(jù)庫,它將數(shù)據(jù)作為單個文件存儲在文件系統(tǒng)中瀑粥。
如過你有數(shù)據(jù)庫服務(wù)器-PostgreSQL挣跋,MySQL,Oracle狞换,MSSQL-并且想要使用它而不是SQLite避咆,那么使用數(shù)據(jù)庫的管理工具為你的Django項目創(chuàng)建一個新的數(shù)據(jù)庫。
無論哪種方式修噪,在您的(空)數(shù)據(jù)庫到位的情況下查库,剩下的就是告訴Django如何使用它。這是項目的settings.py文件的來源割按。
我們將以下代碼行添加到setting.py文件中:
DATABASES ={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
Q65.舉例說明如何在Django中編寫VIEW膨报?
這是我們在Django中使用write一個視圖的方法:
from django.http import HttpResponse
import datetime
def Current_datetime(request):
now =datetime.datetime.now()
html ="<html><body>It is now %s</body></html>"%now
return HttpResponse(html)
返回當(dāng)前日期和時間,作為HTML文檔适荣。
Q66.提到Django模板的組成部分现柠。
模板是一個簡單的文本文件。它可以創(chuàng)建任何基于文本的格式弛矛,如XML够吩,CSV,HTML等丈氓。模板包含在評估模板時替換為值的變量和控制模板邏輯的標(biāo)記(%tag%)周循。
Q67.在Django框架中解釋會話的使用?
Django提供的會話允許您基于每個站點(diǎn)訪問者存儲和檢索數(shù)據(jù)万俗。Django通過在客戶端放置會話ID cookie并在服務(wù)器端存儲所有相關(guān)數(shù)據(jù)來抽象發(fā)送和接收cookie的過程湾笛。
所以數(shù)據(jù)本身并不存儲在客戶端。從安全角度來看闰歪,這很好嚎研。
Q68.列出Django中的繼承樣式
在Django中,有三種可能的繼承樣式:
抽象基類:當(dāng)你只希望父類包含而你不想為每個子模型鍵入的信息時使用库倘;
多表繼承:對現(xiàn)有模型進(jìn)行子類化临扮,并且需要每個模型都有自己的數(shù)據(jù)庫表。
代理模型:只想修改模型的Python級別行為教翩,而無需更改模型的字段杆勇。