函數(shù)基礎-創(chuàng)新互聯(lián)

函數(shù)

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

創(chuàng)新互聯(lián)-專業(yè)網站定制、快速模板網站建設、高性價比府谷網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式府谷網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋府谷地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
  • 函數(shù)的作用
    結構化編程對代碼最基本的封裝,一般按照功能組織一段代碼
    封裝是為了復用,減少冗余代碼
    代碼更見簡潔美觀、可讀易懂
  • 函數(shù)的分類
    內建函數(shù)、庫函數(shù)
  • 函數(shù)的定義、調用 例子:
    def 函數(shù)名(參數(shù)列表): def add(x,y)
    函數(shù)體(代碼塊) result = x+y
    [ return 返回值 ] return result
    out = add(4,5)
    print(out)
    函數(shù)的返回值可以用變量接收
    函數(shù)名也是標識符,命名要求一樣 可看成一個變量
    定義需要在調用之前,調用的時候,需要函數(shù)已經定義,否則會拋出NameError
    函數(shù)是可調用對象,callable 用來判斷 某對象是否是 函數(shù) 在測試時不能待用函數(shù),調用后會將返回值 放入callable()來進行檢測 ,則返回 False 用已造成結果不準確
    語句塊必須縮進
    python的函數(shù)沒有return語句,隱式會返回一個Neno值
    定義中的參數(shù)列表成為形式參數(shù),只有一種符號表達,簡稱形參
    調用
    函數(shù)定義,知識聲明了一個函數(shù),它不會被執(zhí)行,需要調用
    調用的方式,函數(shù)名加上小括號,括號內是參數(shù)
    調用時寫的參數(shù)是實際參數(shù),是是在子啊傳入的值,簡稱實參
    函數(shù)參數(shù)
    參數(shù)調用時傳入的參數(shù)要和定義的個數(shù)匹配(可變參數(shù)列外)
    位置參數(shù)
    def f(x,y,z) 調用使用f(1,3,5) 按位置一一對應傳入實參
    按照參數(shù)定義順序傳入實參
    關鍵字參數(shù)
    def f(x,y,z) 調用使用 f(x=1,y=3,z=5)
    使用形參的名字來輸入實參的方式,如果使用了形參名字,那么傳參順序可以發(fā)生變化
    傳參
    格式嚴格
    要求位置參數(shù)必須在關鍵字參數(shù)之前傳入,位置參數(shù)是按位置對應的
    參數(shù)默認值(缺省值)

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

定義參數(shù)時:非缺省參數(shù)不能放在缺省參數(shù)之后,否則會報錯

位置參數(shù)的可變參數(shù) (可變位置參數(shù)args 盡可能多的收集位置參數(shù)) 類型是元祖
在形參之前使用
表示該形參是可變參數(shù),可以就收多個實參
收集多個實參為一個tuple
可變位置參數(shù)不允許使用關鍵字傳參方式傳入
關鍵字參數(shù)的可變參數(shù) (可變關鍵字參數(shù)kwargs 盡可能多的收集關鍵字參數(shù)) 類型字典 數(shù)據可以被修改
形參之前使用
符號,表示可以接收多個關鍵字參數(shù)
收集的實參名稱和值組成一個字典
可變位置參數(shù)不允許使用關鍵字傳參方式傳入
關鍵字傳參時不允許出現(xiàn)重復的key,否則直接報錯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)

<class 'tuple'> ()
<class 'tuple'> (1, 2, 3)
<class 'tuple'> (1, 2, 3)
<class 'tuple'> (1, 2, 3)
<class 'tuple'> (1, 2, 3, 4, 5)

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

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

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

參數(shù)的結構
參數(shù)結構,顧名思義,只能用在參數(shù)部分
給函數(shù)提供實參時,可以在集合類型前使用*或則*,把集合類型的結構解開,提取里面的每個元素作為函數(shù)的實參
非字典類型使用
號解構將類型轉換成位置參數(shù)
字典類型使用**解構 將類型解構成關鍵字參數(shù),提取到字典來的vaalue值
提取出來的元素數(shù)目要和參數(shù)的要求匹配,也要和參數(shù)的類型匹配

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

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

函數(shù)的嵌套和作用域
在函數(shù)中定義另外一個函數(shù)叫做嵌套
函數(shù)有可見范圍,這就是作用于的概念
內部函數(shù)不能再外部直接使用,會拋出NameError異常,因為在外部直接找不大該函數(shù) 不可見
作用域
一個標識符的可見范圍,這就是標識符的作用域范圍。一般說是變量的作用域

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

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

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

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

函數(shù)地址并沒有變,就是說函數(shù)這個對象沒有變,調用它,它的屬性defaultz在使用元祖保存默認值
xyz默認值是引用類型,引用類型元素的變動,并不是元組的變化
屬性defaults中使用元組保存所有位置參數(shù)默認值,它不會因為在函數(shù)體內使用了它而發(fā)生變化
屬性defaults中使用元組保存所有位置參數(shù)默認值
屬性kwdefaults中使用字典保存所有keyword-only參數(shù)的默認值

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

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

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

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網站名稱:函數(shù)基礎-創(chuàng)新互聯(lián)
網站URL:http://muchs.cn/article40/cocgeo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網站、標簽優(yōu)化App設計、網站維護、小程序開發(fā)域名注冊

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)