結構:python
def 函數名():ide
函數體
函數
執行:spa
函數名()orm
返回值:對象
return
內存
一,函數中,遇到return終止函數作用域
二,返回值,返回給了函數的調用者:函數名()it
return單個值,返回單個值class
return多個值,返回一個由這多個值組成的元祖
函數傳參:
實參角度:
位置參數:從前至後一一對應
關鍵字參數:一一對應,不用按照順序
混合參數:關鍵字參數必定要在位置參數的後面
形參角度:
位置參數:按照順序,一一對應
默認參數:若是不傳參則使用默認參數,傳參則使用傳入參數,經常使用的會設置默認參數
動態參數(萬能參數):
*args接收所有位置參數,聚合爲元祖 **kwargs接收所有關鍵字參數,聚合爲字典
函數調用時,可迭代對象前加*,表明函數打散
*args,默認參數,**kwargs順序
函數的進階:
名稱空間:存儲的是全局(py文件)的變量與值的對應關係
臨時名稱空間:當函數執行時,會在內存中臨時開闢一個空間,此空間記錄函數中變量與值的對應關係,隨着函數的結束,臨時名稱空間而關閉
解釋:
Python代碼運行的時候遇到函數是怎麼作的,從Python解釋器開始執行以後,就在內存中開闢裏一個空間,每當遇到一個變量的時候,就把變量名和值之間對應的關係記錄下來,可是當遇到函數定義的時候,解釋器只是象徵性的將函數名讀如內存,表示知道這個函數存在了,至於函數內部的變量和邏輯,解釋器根本不關心。
等執行到函數調用的時候,Python解釋器會再開闢一塊內存來儲存這個函數裏面的內容,這個時候,才關注函數裏面有哪些變量,而函數中的變量回儲存在新開闢出來的內存中,函數中的變量只能在函數內部使用,而且會隨着函數執行完畢,這塊內存中的全部內容也會被清空。
咱們給這個‘存放名字與值的關係’的空間起了一個名字-------命名空間。
代碼在運行伊始,建立的存儲「變量名與值的關係」的空間叫作全局命名空間;
在函數的運行中開闢的臨時的空間叫作局部命名空間。
python中的空間:
全局名稱空間
臨時(局部)名稱空間
內置名稱空間:len print 等內置函數
加載順序:內置名稱空間-->全局名稱空間-->函數執行時:臨時名稱空間
做用域:
全局做用域:內置名稱空間 全局名稱空間
局部做用域:臨時(局部)名稱空間
取值順序:臨時(局部)名稱空間-->全局命名空間-->內置命名空間
取值順序知足就近原則
函數坑:
取值:局部只能引用全局的變量可是不能修改,修改會報錯
global: 1,能夠修改全局變量 2,在局部空間聲明全局變量
nonlocal: 1,不能操做全局變量 2,在局部做用域中,對父級做用域(或者更外層做用域非全局做用域)的變量進行引用和修改,而且引用的哪層,從那層及如下此變量所有發生改變 3,子名稱空間只能引用父級空間的變量,可是不能修改
函數的嵌套:
程序執行到哪裏,只要遇到函數名(),就執行
函數名的運用:
直接打印函數名,返回函數內存地址
函數名能夠做爲函數的參數
函數名能夠做爲函數的返回值
函數能夠做爲容器類型的元素