2018python全棧爬蟲高端自動(dòng)化課程大綱-01.課堂筆記02返回值作用域_第1頁
2018python全棧爬蟲高端自動(dòng)化課程大綱-01.課堂筆記02返回值作用域_第2頁
2018python全棧爬蟲高端自動(dòng)化課程大綱-01.課堂筆記02返回值作用域_第3頁
2018python全棧爬蟲高端自動(dòng)化課程大綱-01.課堂筆記02返回值作用域_第4頁
2018python全棧爬蟲高端自動(dòng)化課程大綱-01.課堂筆記02返回值作用域_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余30頁可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python函數(shù)返回值、作用從業(yè)十余載,漫漫求知p舉defreturnx+1

p舉defreturnx+1print(x+1)#會(huì)執(zhí)行嗎p多條return語defifx>return">3"return"<= return可以執(zhí)行多次嗎

p多條return語defreturnx+1returnx+p舉defforiinrange(x):ifi>3:returnprint("{}isnotgreaterthanprint(fn(5))#打印什么?print(fn(3))#打印什么?p總 Python函數(shù)使用return語句返回“返回值 所有函數(shù)都有返回值,如果沒有return語句,隱式調(diào)用return return語句并不一定是函數(shù)的語句塊的最后一條語句 行到,隱式調(diào)用returnNone 如果有必要,可以顯示調(diào)用returnNone,可以簡(jiǎn)寫為 作用:結(jié)束函數(shù)調(diào)用、返回p返回多個(gè)defreturn[1,3,defshowlist():return1,3,p返回多個(gè) 函數(shù)不能同時(shí)返回多個(gè)preturn[1,3,5]是指明返回一個(gè)列表,是一個(gè)列表對(duì) return1,3,5看似返回多個(gè)值,隱式的被python封裝成了一個(gè)元defshowlist():return1,3,5x,y,z=showlist()#使用解構(gòu)提取更為方p函數(shù)嵌 在一個(gè)函數(shù)中定義了另外一個(gè)函defouter():definner(): 函數(shù)有可見范圍,這就是作用域的概 內(nèi)部函數(shù)不能在外部直接使用,會(huì)拋NameError異常,因?yàn)樗豢蓀作用 一個(gè)標(biāo)識(shí)符的可見范圍,這就是標(biāo)識(shí)符的作用域。一般常說的是變量的作 舉例,對(duì)比左右2個(gè)函x= x=deffoo():x到底可見還是不可見

deffoo():x+=p全局作用 在整個(gè)程序運(yùn)行環(huán)境中都可p局部作用 在函數(shù)、類等內(nèi)部可 局部變量使用范 過其所在的局部作用defx=1#局部作用域,在fn1defprint(xx可見嗎print(x)#x可見嗎p嵌套結(jié)defouter1():o=defprint("outer 左邊和右邊代碼中變量o的差

p嵌套結(jié)defouter2():o=definner():o=97print("outer 從嵌套結(jié)構(gòu)例子看 外層變量作用域在內(nèi)層作用域可p 內(nèi)層作用域r中,如果定義了o=9,相當(dāng)于當(dāng)前作用域中重新定義了一個(gè)新的變量,但是這個(gè)并沒有覆蓋外層作用域oute中的op再看下面代x=defy=x+1#報(bào)錯(cuò)x+=1#報(bào)錯(cuò),報(bào)什么錯(cuò)?為什么?換成x=1還有錯(cuò)嗎print(x)#為什么它不報(bào)p代x=defx+=px+=1其實(shí)是x=x+ 相當(dāng)于在foo內(nèi)部定義一個(gè)局部變量x,那么foo內(nèi)部所有x都是這個(gè)局部變量x 但是這個(gè)x還沒有完成賦值,就被右邊拿來做加1 如何解決這個(gè)問題p全局變量globalx=5deffoo():globalxx+=1 使用global關(guān)鍵字的變量,將foo內(nèi)的 為使用外部的全局作用域中定義的 全局作用域中必須有x的定 如果全局作用域中沒有x定義會(huì)怎樣p全局變量global#x=5deffoo():globalxx=10x+=1#報(bào)錯(cuò)嗎print(x)#打印什么print(x)#打印什么 做這些實(shí)驗(yàn)建議不要使用ipython、jupyter,因?yàn)樗鼤?huì)上下文中有x定義,可能測(cè)試不出 使用global關(guān)鍵字的變量,將foo內(nèi)的 為使用外部的全局作用域中定義的 但是,x=10賦值即定義,在內(nèi)部作用域?yàn)橐粋€(gè)外部作用域的變量x賦值,不是在內(nèi)部作用域定pglobal總 x+=1這種是特殊形式產(chǎn)生的錯(cuò)誤的原因? 后賦值,而python動(dòng)態(tài)語言是賦值才算定義 告訴內(nèi)部作 內(nèi)部作用域使用x=5之類的賦值語句會(huì)重新定義局部作用域使用的變量x,但是,一旦這個(gè)用域中使用 x為全局的,那么x=5相當(dāng)于在為全局作用域的變量x賦pglobal使用原 外部作用域變量會(huì)內(nèi)部作用域可見,但也不要在這個(gè)內(nèi)部的局部作用域中直接使函數(shù)的目的就是為了封裝,盡量與外 如果函數(shù)需要使用外部全局變量,請(qǐng)使用函數(shù)的形參傳參 一句話:不用global。學(xué)習(xí)它就是為了深入理解變量作閉包 自由變量:未在本地作用域中定義的變量。例如定義在內(nèi)存函數(shù)外的外層函數(shù)的作用域中的 閉包:就是一個(gè)概念,出現(xiàn)在嵌套函數(shù)中,指的是內(nèi)層函 到了外層函數(shù)的自由變量,就形了閉包。很多語言都有這個(gè)概念,最熟悉就是 先看右邊一段代 第4行會(huì)報(bào)錯(cuò)嗎?為什 第8行打印什么結(jié)果 閉包p代碼解 第4行會(huì)報(bào)錯(cuò)嗎?為什 第8行打印什么結(jié)果p打印1 p打印 第9行的c和counter中的c不一樣,而 的是自由變量式counter的變量p 這是Python2中實(shí)現(xiàn)閉包的方式,Python還可以使用l關(guān)鍵字閉包 下面這段代碼會(huì)報(bào)錯(cuò)嗎?為什么 使用global能否解 使用global可以解決,但是這使用的是全局變量,而不是閉 如果要對(duì)普通變量的閉包,Python3中可以使用 count是外層函數(shù)的局部變量,被內(nèi)部 內(nèi)部函數(shù)使用nonlocal關(guān)鍵 count變量在上級(jí)作用域而非本地作用域中定 左邊代碼可以正常使用,且形成閉 右邊代碼不能正常運(yùn)行,變量a不能在全局作用域中p默認(rèn)值舉deffoo()#打印什么?foo()#打印什么?print(xyz)#打印什么?

p默認(rèn)值舉deffoo()#打印什么foo()#打印什么print(xyz)#打印什么p默認(rèn)值舉deffoo()#foo()#print(xyz)#NameError,當(dāng)前作用域沒有xyz 為什么第二次調(diào)用foo函數(shù)打印的是 因?yàn)楹瘮?shù)也是對(duì)象,python把函數(shù)的默認(rèn)值放在了屬性中,這個(gè)屬性就伴隨著這個(gè)函數(shù)對(duì)整個(gè)生命周p查看foo. 屬p運(yùn)行這個(gè)例deffoo(xyz=[],u='abc',returnxyzprint(foo(),id(foo))print(foo.defaults)print(foo(),id(foo))print(foo.defaults) defaults中使用元組保存 xyz默認(rèn)值 類型 類型的元素變動(dòng),并不是元組的變 類型例deffoo(w,u='abc',u='xyz'z=789print(w,u,print(foo.defaultsprint(foo.defaults) 屬 中使用元組保存所有位置參數(shù)默認(rèn)值,它不會(huì)因?yàn)樵诤瘮?shù)體內(nèi)使用了它而發(fā)生改p舉deffoo(w,u='abc',*,z=123,u='xyz'z=789print(w,u,z,zz)print(foo.defaults)print(foo.kwdefaultsp屬 中使用元組保存所有位置參數(shù)默認(rèn)p屬 中使用字典保存所有keyword-only參數(shù)的默認(rèn) 使用可變類型作為默認(rèn)值,就可能修改這個(gè)默 有時(shí)候這個(gè)特性是好的,有的時(shí)候這種特性是不好的,有副作 如何做到按需改變呢?看下面的2種方deffoo(xyzu='abc',z=123):xyz=xyz[:]# print(foo.defaults)print(foo.defaults)print(foo.defaults)print(foo.defaults

1、函數(shù)體內(nèi),不改變默 xyz都是傳入?yún)?shù)或者默認(rèn)參數(shù)的副本,如果就想修改參數(shù) 為deffoo(xyz=None,u='abc',z=123):ifxyzisNone:xyz=[]print(foo.defaultsprint(foo.defaults)print(foo.defaults)print(foo.defaults

2、使用不可變類型默認(rèn) 如果使用缺省值None就創(chuàng)建一個(gè)列 p 使 拷貝創(chuàng)建一個(gè)新的對(duì)象 不能改變傳入的參p第二種方 通過值的判斷就可以靈活的選擇創(chuàng)建或者修改傳入對(duì) 這種方式靈活,應(yīng)用廣 很多函數(shù)的定義,都可以看到使用None這個(gè)不可變的值作為默認(rèn)參數(shù),可以說這是一種慣用 是嵌套函數(shù)的外部函 名空 Build-in,內(nèi)置模 名空間,生命周期從python解釋器啟時(shí)創(chuàng)建到解釋器退出時(shí)消亡。例如print(open),print和open都 所以一個(gè)名詞的查找順序就是p全局函deffoo(xyz=[],u='abc',returnxyzprint(foo(),id(foo),foo.defaultsdeffoo(xyz=[],u='abc',returnprint(foo(),id(foo),foo.defaultsdelprint(foo(),id(foo),foo.defaultsp全局函數(shù)銷 重新定義同名函pdel語句刪除函數(shù)對(duì)p程序結(jié)束p

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論