




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一題如下兩段代碼,運(yùn)行結(jié)束後的成果是什么?與否相似?原因是什么?代碼一代碼二第二題4G內(nèi)存怎么讀取一種5G的數(shù)據(jù)?第三題淺述深淺拷貝答案第一題成果不相似第一段成果為:[{'num':0},{'num':1},{'num':2},{'num':3},{'num':4},{'num':5},{'num':6},{'num':7},{'num':8},{'num':9}]第二段成果為:[{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9}]字典是可變類型,這裏l.append(a)相稱于執(zhí)行了淺拷貝,每變化一次a中num的值,所有a的值都將變化第二題實(shí)現(xiàn)措施有兩種。實(shí)現(xiàn)措施一:措施一的實(shí)現(xiàn)思緒是通過生成器,一次讀取少許數(shù)據(jù),原則答案是根據(jù)文獻(xiàn)實(shí)現(xiàn),這裏給出的例子是咸魚學(xué)習(xí)bobby老師的課程時(shí)記錄的例子,不懂得怎樣使用生成器完畢這個(gè)需求的朋友可以參照:實(shí)現(xiàn)措施二:在linux系統(tǒng)下使用split可以分割文獻(xiàn),對(duì)于多行文獻(xiàn)可以使用按行分割的方式,對(duì)于單行的大文獻(xiàn)可以采用按文獻(xiàn)大小分割。按文獻(xiàn)行數(shù)分割:split-l300large_file.logsmallfile_prefix按文獻(xiàn)大小分割:split-b10mlarge_file.logsmallfile_prefix之後再按文獻(xiàn)讀取即可。第一題下圖中的打印成果分別是什么?第二題Python中靜態(tài)措施、類措施、組員函數(shù)作用是什么?第三題說說對(duì)缺省參數(shù)的理解?*args是什么?**kwargs是什么?答案第一題前三個(gè)是True,最終一種會(huì)報(bào)錯(cuò)。具前三個(gè)為何輸出True,不理解的可以參照下圖:圖來源于bobby老師的異步IO編程課件最終一種為何報(bào)錯(cuò),我們可以先看下issubclass的使用方法:issubclass措施用于判斷參數(shù)
class
與否是類型參數(shù)
classinfo
的子類
issubclass(class,
classinfo)
參數(shù)
class
--
類。
classinfo
--
類。
返回值
假如
class
是
classinfo
的子類返回
True,否則返回
False。
而在題目中b并不是一種類,因此報(bào)錯(cuò)。第二題我們先理清晰靜態(tài)函數(shù)、類函數(shù)分別是什么?靜態(tài)措施是一種一般函數(shù),就位于類定義的命名空間中,它不會(huì)對(duì)任何實(shí)例類型進(jìn)行操作。使用裝飾器@staticmethod定義靜態(tài)措施。類對(duì)象和實(shí)例都可以調(diào)用靜態(tài)措施。類措施是將類自身作為對(duì)象進(jìn)行操作的措施。類措施使用@classmethod裝飾器定義,其第一種參數(shù)是類,約定寫為cls。第三題缺省參數(shù)是指在調(diào)用函數(shù)的時(shí)候沒有傳入?yún)?shù)的狀況下,調(diào)用默認(rèn)的參數(shù),在調(diào)用函數(shù)的同步賦值時(shí),所傳入的參數(shù)會(huì)替代默認(rèn)參數(shù)。*args是不定長(zhǎng)參數(shù),可以表達(dá)輸入?yún)?shù)是不確定的,可以任意多種**kwargs是關(guān)鍵詞參數(shù),賦值的時(shí)候是以鍵=值的方式,參數(shù)是可以任意多對(duì)。以上兩個(gè)的使用是在定義函數(shù)的時(shí)候不確定會(huì)傳入多少參數(shù)時(shí)使用。什么是鴨子類型?當(dāng)看到一只鳥,走起來像鴨子、游泳起來像鴨子、叫起來像鴨子那么這只鳥就可以被稱之為鴨子關(guān)注點(diǎn)在對(duì)象的行為,而不是類型(ducktyping)例如file,StringIO,socket對(duì)象都支持read/write措施(filelikeobject)例如定義了
_iter_
魔術(shù)措施的對(duì)象可以使用for鴨子類型更關(guān)注接口而非類型。什么是monkeypatch?那些地方用到了?自已怎樣實(shí)現(xiàn)?所謂猴子補(bǔ)丁就是運(yùn)行時(shí)替代gevent庫需要修改內(nèi)置的socketfromgeventimportmonkey;monkey.patch_socket()自已實(shí)現(xiàn)猴子補(bǔ)丁:import
time
print(time.time())
def
_time():
return
1234
time.time
=
_time
print(time.time)什么是自???運(yùn)行時(shí)判斷一種對(duì)象的類型能力Python一切皆對(duì)象,用type,id,isinstance獲取對(duì)象類型信息Inspect模塊提供了更多獲取對(duì)象信息的函數(shù)什么是列表或字典推導(dǎo)?類似:
[iforiinrange(10)ifi%2==0]一種迅速生成list/dict/set的措施,用來替代map/filter
python<br/>a=[1,2,3]<br/>b=['a','b','c']<br/>d={k:vfork,vinzip(b,a)}<br/>print(d)<br/>返回生成器:
(iforiinrange(10)ifi%2==0)Python2/3的差異點(diǎn)print成為函數(shù)編碼問題,Python3不再有Unicode對(duì)象,默認(rèn)str就是UnicodeUnicode(給人看的)
->
encode
->
字節(jié)串(給計(jì)算機(jī)看的)
傳播的時(shí)候使用字節(jié)串,操作的時(shí)候使用UnicodePython3除法返回浮點(diǎn)數(shù)類型注解def
hello(name:
str)
->
str:
return
'hello'
+
name優(yōu)化的super()以便調(diào)用父類函數(shù)高級(jí)解包操作:
a,b,*res=range(10)限定關(guān)鍵詞參數(shù)Python3重新拋出異常不會(huì)丟失棧信息(raisefrom)一切返回迭代器:range,zip,map,dict.valuesyieldform鏈接子生成器asyncio內(nèi)置庫,asyn/await原生協(xié)程支持異步編程兼容Python2/3的工具six模塊2to3等工具轉(zhuǎn)換代碼_future_函數(shù)-如下代碼分別輸出什么?Python怎樣傳參?#
代碼1
def
flist(l):
l.append(0)
print(l)
l
=
[]
flist(l)
flist(l)#
代碼2
def
fstr(s):
s
+=
'a'
print(s)
s
=
'hehe'
flist(s)
flist(s)Python唯一支持的參數(shù)傳遞是共享傳參,函數(shù)形參獲得實(shí)參中各個(gè)引用的副本。Python可變/不可變:不可變對(duì)象->bool/int/float/tuple/str/frozenset
可變對(duì)象->list/dict/set#
測(cè)試?yán)?
def
clear_list(l):
l
=
[]
ll
=
[1,2,3]
clear_list(ll)
print(ll)
#
[1,2,3]默認(rèn)參數(shù)只計(jì)算一次。#
測(cè)試?yán)?
def
flist(l=[1]):
l.append(1)
print(l)
flist()
flist()
#
[1,
1]
#
[1,
1,
1]函數(shù)-Python*args**kwargs都是什么?用來處理可變參數(shù)args被打包成tuplekwargs被打包成dictPython異常機(jī)制-什么是Python異常?Python使用異常處理錯(cuò)誤(有些語言使用錯(cuò)誤碼)BaseExceptionSystemExit/KeyboardInterrupt/GeneratorExitExceptionPython異常機(jī)制-什么時(shí)候需要捕捉異常網(wǎng)絡(luò)祈求(超時(shí)、連接錯(cuò)誤等)資源訪問(權(quán)限問題,資源不存在)代碼邏輯(越界訪問,keyerror)Python異常機(jī)制-怎樣處理異常?try:
#
fun
-
也許會(huì)拋出異常的代碼
except
(Exception1,
Exception2)
as
e:
#
可以捕捉多種異常并處理
#
異常處理代碼
else:
#
pass
異常沒有發(fā)生時(shí)候的代碼邏輯
finally:
#
pass
無論異常有無發(fā)生都會(huì)執(zhí)行的代碼,一般處理資源的關(guān)閉和釋放Python異常機(jī)制-怎樣自定義異常?繼承Exception實(shí)現(xiàn)自定義異常給異常加上某些附加信息處理某些業(yè)務(wù)有關(guān)的特定異常(raiseMyException)GIL-什么是CPythonGIL?Cpython解釋器的內(nèi)存管理并不是線程安全保護(hù)多線程狀況下對(duì)Python對(duì)象進(jìn)行訪問Cpython使用簡(jiǎn)樸的所機(jī)制防止多種線程同步執(zhí)行字節(jié)碼GIL影響是?GIL限制了程序的多核執(zhí)行同一時(shí)間只能有一種線程執(zhí)行字節(jié)碼CPU密集程序難以運(yùn)用多核優(yōu)勢(shì)IO期間會(huì)釋放GIL,對(duì)IO密集程序影響不大怎樣規(guī)避GIL影響?CPU密集可以使用多進(jìn)程+進(jìn)程池IO密集使用多線程/協(xié)程cython擴(kuò)展怎樣剖析程序性能?二八定律,大部分時(shí)間耗時(shí)在少許代碼上內(nèi)置的profile/cprofile等工具使用pyflame的火焰圖工具什么是生成器生成器就是可以生成值得函數(shù)當(dāng)一種函數(shù)裏有了yield關(guān)鍵字就成了生成器生成器可以掛起執(zhí)行并且保持目前執(zhí)行的狀態(tài)服務(wù)器端優(yōu)化措施數(shù)據(jù)構(gòu)造與算法優(yōu)化數(shù)據(jù)庫層:索引優(yōu)化,慢查詢消除,批量操作減少IO,Nosql網(wǎng)絡(luò)IO:批量操作,pipline操作減少IO緩存:使用內(nèi)存數(shù)據(jù)庫redis異步:asyncio,celery并發(fā):gevent、多線程為何寫單元測(cè)試?防止三無代碼(無文檔,無注釋,無單測(cè))保證代碼邏輯的對(duì)的性單測(cè)影響設(shè)計(jì),易測(cè)代碼往往是高內(nèi)聚低耦合的回歸測(cè)試,防止改一處整個(gè)服務(wù)不可用單元測(cè)試庫有哪些?nose/pytest較為常用moke模塊用來模擬替代網(wǎng)絡(luò)祈求coverage記錄測(cè)試覆蓋率1.怎樣反向迭代一種序列#假如是一種list,最快的措施使用reverse
tempList=[1,2,3,4]
tempList.reverse()
forxintempList:
printx#假如不是list,需要手動(dòng)重排
templist=(1,2,3,4)
foriinrange(len(templist)-1,-1,-1):
printtemplist[i]2.怎樣查詢和替代一種文本中的字符串#最簡(jiǎn)樸的措施使用replace()
tempstr="helloyouhellopythonareyouok"
printtempstr.replace("you","python")#還可以使用正則,有個(gè)sub()
tempstr="helloyouhellopythonareyouok"
importre
rex=r'(hello|Use)'
printre.sub(rex,"Bye",tempstr)3.使用python實(shí)現(xiàn)單例模式#措施一:可以使用__new__措施
#在__new__措施中把類實(shí)例綁定到類變量_instance上,假如cls._instance為None表達(dá)該類還沒有實(shí)例化過,實(shí)例化該類并返回。假如cls_instance不為None表達(dá)該類已實(shí)例化,直接返回cls_instance
classSingleTon(object):
def__new__(cls,*args,**kwargs):
ifnothasattr(cls,'_instance'):
cls._instance=object.__new__(cls,*args,**kwargs)
returncls._instance
classTestClass(SingleTon):
a=1
test1=TestClass()
test2=TestClass()
printtest1.a,test2.a
test1.a=2
printtest1.a,test2.a
printid(test1),id(test2)#措施二:使用裝飾器,建立過實(shí)例的就放到instances裏面,下次建立的時(shí)候先檢查裏面有無
defSingleTon(cls,*args,**kwargs):
instances={}
printinstances
def_singleton():
ifclsnotininstances:
instances[cls]=cls(*args,**kwargs)
printinstances
returninstances[cls]
return_singleton
@SingleTon
classLastClass(object):
a=1
test1=LastClass()
printtest1.a
test2=LastClass()
printtest2.a#措施三:使用__metaclass__(元類)有關(guān)元類看看這個(gè)吧;
classSignalTon(type):
def__init__(cls,name,bases,dict):
super(SignalTon,cls).__init__(name,bases,dict)
cls._instance=None
def__call__(cls,*args,**kwargs):
ifcls._instanceisNone:
cls._instance=super(SignalTon,cls).__call__(*args,**kwargs)
returncls._instance
classTestClass(object):
__metaclass__=SignalTon
test1=TestClass()
test2=TestClass()
test1.a=2
printtest1.a,test2.a
printid(test1),id(test2)#措施四:共享屬性
所謂單例就是所有的引用(實(shí)例,對(duì)象)擁有相似的屬性和措施,同一種類的實(shí)例天生都會(huì)有相似的措施,那我們只需要保證同一種類所產(chǎn)生的實(shí)例都具有相似的屬性。所有實(shí)例共享屬性最簡(jiǎn)樸直接的措施就是共享__dict__屬性指向。
classSingleTon(object):
_state={}
def__new__(cls,*args,**kwargs):
obj=object.__new__(cls,*args,**kwargs)
obj.__dict__=cls._state
returnobj
classTestClass(SingleTon):
a=1
test1=TestClass()
test2=TestClass()
printtest1.a,test2.a
test1.a=2
printtest1.a,test2.a
printid(test1),id(test2)
#措施五:使用同一種模版
#寫在mysingleton.py中
classMy_Singleton(object):
deffoo(self):
pass
my_singleton=My_Singleton()
#寫在要使用這個(gè)實(shí)例的py文獻(xiàn)裏面,在不一樣的引用的地方都引用相似的實(shí)例,以此實(shí)現(xiàn)單例模式
frommysingletonimportmy_singleton
my_singleton.foo()4.重新實(shí)現(xiàn)str.strip()defrightStrip(tempStr,splitStr):
endindex=tempStr.rfind(splitStr)
whileendindex!=-1andendindex==len(tempStr)-1:
tempStr=tempStr[:endindex]
endindex=tempStr.rfind(splitStr)
returntempStr
defleftStrip(tempStr,splitStr):
startindex=tempStr.find(splitStr)
whilestartindex==0:
tempStr=tempStr[startindex+1:]
startindex=tempStr.find(splitStr)
returntempStr
str="
H
"
printstr
printleftStrip(str,'')
printrightStrip(str,'')
#輸出
H
H
H5.super的原理#閱讀下面的代碼,它的輸出成果是什么?
classA(object):
def__init__(self):
print"enterA"
super(A,self).__init__()
#new
print"leaveA"
classB(object):
def__init__(self):
print"enterB"
super(B,self).__init__()
#new
print"leaveB"
classC(A):
def__init__(self):
print"enterC"
super(C,self).__init__()
print"leaveC"
classD(A):
def__init__(self):
print"enterD"
super(D,self).__init__()
print"leaveD"
classE(B,C):
def__init__(self):
print"enterE"
super(E,self).__init__()
#change
print"leaveE"
classF(E,D):
def__init__(self):
print"enterF"
super(F,self).__init__()
#change
print"leaveF"
#輸出
enterF
enterE
enterB
enterC
enterD
enterA
leaveA
leaveD
leaveC
leaveB
leaveE
leaveF6.閉包常用的裝飾器就是閉包的一種
defmake_adder(addend):
defadder(addend):
returnaddend+addend
returnadder
P1=make_adder(5)
P2=make_adder(4)
printp1(10)
#輸出15
printp2(10)
#輸出14閉包(Closure)是詞法閉包(LexicalClosure)的簡(jiǎn)稱,是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,雖然已經(jīng)離開了發(fā)明它的環(huán)境也不例外
7.給列表中的字典排序list對(duì)象alist[{“name”:”a”,”age”:20},{“name”:”b”,”age”:30},{“name”:”c”,”age”:25}]按照age從大到小排序alist=[{"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}]
alist.sort(key=lambda:x:-x.get("age"))
printalist8.合并兩個(gè)列表排除反復(fù)元素用簡(jiǎn)潔的措施合并alist=[‘a(chǎn)’,’b’,’c’,’d’,’e’,’f’]
blist=[‘x’,’y’,’z’,’e’,’f’]并且元素不能反復(fù)alist=['a','b','c','d','e','f']
blist=['x','y','z','e','f']
defmerge_list(*args):
s=set()
foriinargs:
s=s.union(i)
print(s)
returns
merge_list(alist,blist)9.打亂一種排好序的列表fromrandomimportshuffle
alist=range(10)
print(alist)
shuffle(alist)
print(alist)10.簡(jiǎn)樸的實(shí)現(xiàn)一種棧構(gòu)造stackclassStack(object):
def__init__(self):
self.value=[]
defpush(self,x):
self.value.append(x)
defpop(self):
self.value.pop()
stack=Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.value)
stack.pop()
print(stack.value)11.輸入一種曰期,返回時(shí)一年中的哪一天fromdatetimeimportdatetime
defwhich_day(year,month,day):
return(datetime(year,month,day)-datetime(year,1,1)).days+1
print(which_day(,1,15))12.把字符串”k1:1|k2:2|k3:3”處理成python字典的形式:{k1:1,k2:2,k3:3}defstring_to_dict(string):
d={}
forkvinstring.split("|"):
k,v=kv.split(":")
ifv.isdigit():
v=int(v)
d[k]=v
returnd
print(string_to_dict("k1:1|k2:2|k3:3"))13.判斷輸入的值與否在矩陣之中(楊氏矩陣)在一種二維數(shù)組之中,每一行都按照從走到右遞增的次序排序,每一列到按照從上到下的次序排序.請(qǐng)完畢一種函數(shù),輸入這樣的一種二維手術(shù)和一種整數(shù),判斷數(shù)組中與否具有該整數(shù)#處理數(shù)組矩陣
arr=[[1,4,7,10,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]]
defget_num(num,data=None):
whiledata:
ifnum>data[0][-1]:
deldata[0]
elifnum<data[0][-1]:
data=list(zip(*data))
deldata[-1]
data=list(zip(*data))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東引進(jìn)創(chuàng)新創(chuàng)業(yè)團(tuán)隊(duì)合同書
- 投影儀購(gòu)銷合同書
- 中國(guó)公路運(yùn)輸合同
- 型鋼采購(gòu)合同協(xié)議
- 家教老師聘用合同書
- 玻璃幕墻安裝合同
- 商品買賣居間合同
- 美國(guó)工程設(shè)計(jì)服務(wù)合同
- 側(cè)柏買賣合同
- 遼寧輕工職業(yè)學(xué)院《建筑設(shè)備(電)》2023-2024學(xué)年第二學(xué)期期末試卷
- 【道 法】學(xué)會(huì)自我保護(hù)+課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 買房協(xié)議書樣板電子版
- 河南航空港發(fā)展投資集團(tuán)有限公司2025年社會(huì)招聘題庫
- 綿陽市高中2022級(jí)(2025屆)高三第二次診斷性考試(二診)語文試卷(含答案)
- 常州初三強(qiáng)基數(shù)學(xué)試卷
- 《吞咽障礙膳食營(yíng)養(yǎng)管理規(guī)范》(T-CNSS 013-2021)
- 仁愛七年級(jí)下冊(cè)英語教學(xué)計(jì)劃
- 躁狂的健康宣教
- 第四講國(guó)防動(dòng)員準(zhǔn)備
- 四川省成都市2025屆高三一診考試英語試卷含解析
- 2024年度房地產(chǎn)開發(fā)項(xiàng)目安全生產(chǎn)委托管理協(xié)議范本3篇
評(píng)論
0/150
提交評(píng)論