真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

函數(shù)基礎(chǔ)

函數(shù)

函數(shù)由若干語句組成的語句塊、函數(shù)名、參數(shù)列表構(gòu)成。它是組織代碼的最小單元
目的:為了完成一定的功能

目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、武清網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

  • 函數(shù)的作用
    結(jié)構(gòu)化編程對代碼最基本的封裝,一般按照功能組織一段代碼
    封裝是為了復(fù)用,減少冗余代碼
    代碼更見簡潔美觀、可讀易懂
  • 函數(shù)的分類
    內(nèi)建函數(shù)、庫函數(shù)
  • 函數(shù)的定義、調(diào)用 例子:
    def 函數(shù)名(參數(shù)列表): def add(x,y)
    函數(shù)體(代碼塊) result = x+y
    [ return 返回值 ] return result
    out = add(4,5)
    print(out)
    函數(shù)的返回值可以用變量接收
    函數(shù)名也是標(biāo)識(shí)符,命名要求一樣 可看成一個(gè)變量
    定義需要在調(diào)用之前,調(diào)用的時(shí)候,需要函數(shù)已經(jīng)定義,否則會(huì)拋出NameError
    函數(shù)是可調(diào)用對象,callable 用來判斷 某對象是否是 函數(shù) 在測試時(shí)不能待用函數(shù),調(diào)用后會(huì)將返回值 放入callable()來進(jìn)行檢測 ,則返回 False 用已造成結(jié)果不準(zhǔn)確
    語句塊必須縮進(jìn)
    python的函數(shù)沒有return語句,隱式會(huì)返回一個(gè)Neno值
    定義中的參數(shù)列表成為形式參數(shù),只有一種符號(hào)表達(dá),簡稱形參
    調(diào)用
    函數(shù)定義,知識(shí)聲明了一個(gè)函數(shù),它不會(huì)被執(zhí)行,需要調(diào)用
    調(diào)用的方式,函數(shù)名加上小括號(hào),括號(hào)內(nèi)是參數(shù)
    調(diào)用時(shí)寫的參數(shù)是實(shí)際參數(shù),是是在子啊傳入的值,簡稱實(shí)參
    函數(shù)參數(shù)
    參數(shù)調(diào)用時(shí)傳入的參數(shù)要和定義的個(gè)數(shù)匹配(可變參數(shù)列外)
    位置參數(shù)
    def f(x,y,z) 調(diào)用使用f(1,3,5) 按位置一一對應(yīng)傳入實(shí)參
    按照參數(shù)定義順序傳入實(shí)參
    關(guān)鍵字參數(shù)
    def f(x,y,z) 調(diào)用使用 f(x=1,y=3,z=5)
    使用形參的名字來輸入實(shí)參的方式,如果使用了形參名字,那么傳參順序可以發(fā)生變化
    傳參
    格式嚴(yán)格
    要求位置參數(shù)必須在關(guān)鍵字參數(shù)之前傳入,位置參數(shù)是按位置對應(yīng)的
    參數(shù)默認(rèn)值(缺省值)

定義時(shí),在形參后跟上一個(gè)值
缺省參數(shù)不指定,且傳參時(shí)沒有傳參則引起報(bào)錯(cuò)
作用
參數(shù)的默認(rèn)值可以在未傳入足夠的實(shí)參的時(shí)候,對沒有給定的參數(shù)賦值為默認(rèn)值
參數(shù)非常多的時(shí)候,并不需要用戶都輸入所有參數(shù),可以簡化函數(shù)調(diào)用

定義參數(shù)時(shí):非缺省參數(shù)不能放在缺省參數(shù)之后,否則會(huì)報(bào)錯(cuò)

位置參數(shù)的可變參數(shù) (可變位置參數(shù) args 盡可能多的收集位置參數(shù)) 類型是元祖
在形參之前使用
表示該形參是可變參數(shù),可以就收多個(gè)實(shí)參
收集多個(gè)實(shí)參為一個(gè)tuple
可變位置參數(shù)不允許使用關(guān)鍵字傳參方式傳入
關(guān)鍵字參數(shù)的可變參數(shù) (可變關(guān)鍵字參數(shù) kwargs 盡可能多的收集關(guān)鍵字參數(shù)) 類型字典 數(shù)據(jù)可以被修改
形參之前使用
符號(hào),表示可以接收多個(gè)關(guān)鍵字參數(shù)
收集的實(shí)參名稱和值組成一個(gè)字典
可變位置參數(shù)不允許使用關(guān)鍵字傳參方式傳入
關(guān)鍵字傳參時(shí)不允許出現(xiàn)重復(fù)的key,否則直接報(bào)錯(cuò)SyntaxError
可變參數(shù)混合使用

def add(*nums):
print(type(nums),nums)
sum = 0
for i in nums:
sum += i
return sum

add(),add({1,2,3}),add((1,2,3)),add(*[1,2,3]),add(1,2,3,4,5)

()
(1, 2, 3)
(1, 2, 3)
(1, 2, 3)
(1, 2, 3, 4, 5)

可變參數(shù)總結(jié)
有位置可變參數(shù)和關(guān)鍵字可變參數(shù)
位置可變參數(shù)在形參之前使用一個(gè)星號(hào)*
關(guān)鍵字可變參數(shù)在形參之前使用兩個(gè)星號(hào)**
位置可變參數(shù)和關(guān)鍵字可變參數(shù)都可以收集若干個(gè)實(shí)參,位置可變參數(shù)收集行形成一個(gè)tuple,關(guān)鍵字可變參數(shù)收集形成一個(gè)dict
混合使用參數(shù)時(shí),可變參數(shù)要放到參數(shù)列表的最后,普通參數(shù)需要放到參數(shù)列表之前,位置可變參數(shù)需要在關(guān)鍵字可變參數(shù)之前
參數(shù)默認(rèn)值(缺省值)

keyword-only參數(shù)
如果在一個(gè)星號(hào)參數(shù)后,或者一個(gè)位置可變參數(shù)后,出現(xiàn)普通的參數(shù),實(shí)際上已經(jīng)不是普通參數(shù)了,而是keyword-only參數(shù)
當(dāng)*args后面出現(xiàn) keyword參數(shù)時(shí),現(xiàn)在的keyword變成了 keyword-only 參數(shù) 必須要有參數(shù)出傳入,否則報(bào)錯(cuò)TypeError

*args已經(jīng)將所有的位置參數(shù)全部收集,而后面的keyword-only收集不到實(shí)參,產(chǎn)生報(bào)錯(cuò)
位置參數(shù)、keyword-only可以設(shè)置缺省值,以免發(fā)生漏傳報(bào)錯(cuò)
當(dāng)有位置參數(shù),且沒有指定缺省值時(shí),必須傳入實(shí)參,否則報(bào)錯(cuò) 且 實(shí)參與位置形參個(gè)數(shù)要對應(yīng)
參數(shù)規(guī)則
參數(shù)列表一般順序:位置參數(shù)、帶有缺省值的位置參數(shù)、可變位置參數(shù)、keyword-only參數(shù)(可帶缺省值的keyword-only參數(shù))、可變關(guān)鍵字參數(shù)

參數(shù)的結(jié)構(gòu)
參數(shù)結(jié)構(gòu),顧名思義,只能用在參數(shù)部分
給函數(shù)提供實(shí)參時(shí),可以在集合類型前使用*或則*,把集合類型的結(jié)構(gòu)解開,提取里面的每個(gè)元素作為函數(shù)的實(shí)參
非字典類型使用
號(hào)解構(gòu)將類型轉(zhuǎn)換成位置參數(shù)
字典類型使用**解構(gòu) 將類型解構(gòu)成關(guān)鍵字參數(shù),提取到字典來的vaalue值
提取出來的元素?cái)?shù)目要和參數(shù)的要求匹配,也要和參數(shù)的類型匹配

函數(shù)的返回值與作用域
python函數(shù)使用return語句返回——“返回值”
所有函數(shù)都有返回值,沒有return語句,隱式會(huì)調(diào)用return Neno
return 語句并不一定是函數(shù)的語句塊的最后一條語句
一個(gè)函數(shù)可以存在多個(gè)return語句,但是只有一條可以被執(zhí)行。如果沒有return語句被執(zhí)行,隱式調(diào)用return Neno
如果有必要,可以顯示調(diào)用return Neno,可簡寫為return
如果函數(shù)執(zhí)行了return語句,函數(shù)就會(huì)返回,當(dāng)前被執(zhí)行的return語句之后的語句就不會(huì)被執(zhí)行
作用:
結(jié)束函數(shù),返回——返回值

返回多個(gè)值
return 只能返回一個(gè)值,當(dāng)你向返回多個(gè)值時(shí),python 會(huì)以一種方式將其封裝為一個(gè)元素返回
函數(shù)不能同時(shí)返回多個(gè)值
return 1,2,3 看似返回多個(gè)值,其實(shí)隱式被python 轉(zhuǎn)換為了一個(gè)元組
x,y,z = showlist()#使用解構(gòu)提取更為方便

函數(shù)的嵌套和作用域
在函數(shù)中定義另外一個(gè)函數(shù)叫做嵌套
函數(shù)有可見范圍,這就是作用于的概念
內(nèi)部函數(shù)不能再外部直接使用,會(huì)拋出NameError異常,因?yàn)樵谕獠恐苯诱也淮笤摵瘮?shù) 不可見
作用域
一個(gè)標(biāo)識(shí)符的可見范圍,這就是標(biāo)識(shí)符的作用域范圍。一般說是變量的作用域

全局作用域
在整個(gè)程序運(yùn)行環(huán)境中都可見
局部作用域
在函數(shù)、類等內(nèi)部可見
局部變量時(shí)候用范圍不能超過其所在的局部作用域
global全局變量
使用關(guān)鍵字global的變量,將 函數(shù) 內(nèi)的聲明變量 聲明為使用那個(gè)外部的全局變量
全局作用域中,必須要有 變量的定義
賦值即定義,在內(nèi)部作用域?yàn)橐粋€(gè)外部作用域的的比那領(lǐng)賦值,不實(shí)在內(nèi)部作用域定義一個(gè)洗呢變量,而是將新賦值的變量作用在全局,這里的變量作用域還是全局作用域
global總結(jié)
x+=1這種特殊形式產(chǎn)生的錯(cuò)誤
x = x+1 當(dāng)前x屬于賦值狀態(tài),此時(shí)的x并沒有值,等號(hào)是先算右邊在賦值,此時(shí)的等號(hào)左邊x沒有值,沒有值的情況下+1 在賦值給x 顯然是不正確的,故在x += 1 時(shí)出現(xiàn)了報(bào)錯(cuò)
是因?yàn)椋纫煤筚x值產(chǎn)生的,而python動(dòng)態(tài)語言是賦值才算定義,才能被引用。解決辦法,在語句全增加一句輔助語句即可,或者使用global告訴內(nèi)部作用域,去全局作用域查找變量定義
內(nèi)部作用域使用的 變量 賦值語句 會(huì)重新定義局部作用域使用的變量,但是,一旦這個(gè)作用域中使用global聲明的變量為 全局的,那么相當(dāng)于 在為全局作用域的變量賦值

global使用原則
外部作用域變量會(huì)在內(nèi)部作用域可見,但也不雅在這個(gè)內(nèi)部的局部作用于中被直接使用,因?yàn)楹瘮?shù)的目的就是為了封裝,盡可能與外界隔離
如果函數(shù)需要使用外部全局變量,請使用函數(shù)的形參傳參解決
一句話:不用global
閉包
自由變量:
未在本地作用域定義的變量 即定義在內(nèi)層函數(shù)之外的 外層函數(shù)作用域中的變量
閉包
就是一個(gè)概念,出現(xiàn)在嵌套函數(shù)中
內(nèi)層函數(shù)引用了外層函數(shù)的自由變量,從而形成了閉包

使用global可以解決,但是這使用的是全局變量,而不是閉包
如果對普通變量閉包,python3 可以使用nonlocal
nonlocal關(guān)鍵字
使用nonlocal關(guān)鍵字,將變量標(biāo)記為不再本地作用域定義,而在上級(jí)的某一級(jí)局部作用域中定義,但不能是全局作用域中的定義

默認(rèn)值作用域
默認(rèn)值的值是引用的它們在內(nèi)存中的地址
當(dāng)默認(rèn)值的值為非引用類型時(shí),他們的值是不變的。當(dāng)他們?yōu)橐妙愋蜁r(shí),它們指向的是其內(nèi)存中的地址,其中的值會(huì)發(fā)生變化,它們的默認(rèn)值地址并沒有發(fā)生變化,還是引用的那個(gè)內(nèi)存地址。這是的默認(rèn)值就會(huì)發(fā)生變化

函數(shù)地址并沒有變,就是說函數(shù)這個(gè)對象沒有變,調(diào)用它,它的屬性defaultz在使用元祖保存默認(rèn)值
xyz默認(rèn)值是引用類型,引用類型元素的變動(dòng),并不是元組的變化
屬性defaults中使用元組保存所有位置參數(shù)默認(rèn)值,它不會(huì)因?yàn)樵诤瘮?shù)體內(nèi)使用了它而發(fā)生變化
屬性defaults中使用元組保存所有位置參數(shù)默認(rèn)值
屬性kwdefaults中使用字典保存所有keyword-only參數(shù)的默認(rèn)值

使用默認(rèn)值的方法
一:使用影子拷貝創(chuàng)建一個(gè)新的對象,永遠(yuǎn)不能改變傳入的參數(shù)
二:通過值得判斷就可以領(lǐng)過選擇創(chuàng)建或者修改傳入對象
這種方式,靈活、被廣泛應(yīng)用
很多函數(shù)的定義,都可以看到適應(yīng)None這個(gè)不可變的值作為默認(rèn)參數(shù),這是一種慣用法

變量名解析原則LEGB
local,本地作用域,局部作用域的local命名空間。函數(shù)調(diào)用時(shí)創(chuàng)建,調(diào)用結(jié)束消亡
Enclosing,實(shí)現(xiàn)了閉包,這個(gè)就是嵌套函數(shù)的外部函數(shù)的命名空間
Global全局作用域,即一個(gè)模塊的命名空間,模塊被import時(shí),創(chuàng)建,解釋器退出時(shí)消亡
Build-in,內(nèi)置模塊的命名空間,生命周期從python解釋器啟動(dòng)時(shí)創(chuàng)建到解釋器退出時(shí)消亡
顧名思義 LEGB就是其查找的順序,就近原則

函數(shù)的銷毀
全局函數(shù)銷毀
重新定義同名函數(shù)、del語句刪除函數(shù)對象、程序結(jié)束時(shí)
局部函數(shù)銷毀
重新在上級(jí)作用域定義同名函數(shù)、del語句刪除函數(shù)名,函數(shù)對象的引用計(jì)數(shù)減1、上級(jí)作用域銷毀時(shí)


網(wǎng)站標(biāo)題:函數(shù)基礎(chǔ)
分享地址:http://weahome.cn/article/gpcgcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部