中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

函數基礎

發布時間:2020-03-16 10:47:35 來源:網絡 閱讀:357 作者:2737851719 欄目:編程語言

函數

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

默認值作用域
默認值的值是引用的它們在內存中的地址
當默認值的值為非引用類型時,他們的值是不變的。當他們為引用類型時,它們指向的是其內存中的地址,其中的值會發生變化,它們的默認值地址并沒有發生變化,還是引用的那個內存地址。這是的默認值就會發生變化

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

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱州市| 九龙城区| 小金县| 漯河市| 寻乌县| 民丰县| 房产| 黔南| 陆良县| 郧西县| 沈阳市| 定边县| 石城县| 文化| 连江县| 康乐县| 修水县| 比如县| 宁波市| 新邵县| 共和县| 广平县| 神农架林区| 化州市| 赫章县| 塔城市| 措美县| 开远市| 湖南省| 宁阳县| 灵丘县| 民和| 项城市| 沂南县| 依安县| 河间市| 都匀市| 芜湖市| 皮山县| 宝应县| 临清市|