函數嵌套與裝飾器
*應用場景,位置參數中代表將多個參數存入元祖,**將關鍵字參數傳入字典
位置參數:
位置形參:必須被傳值,一一對應
位置實參:按從左到右的順序與形參一一對應
關鍵字參數:按照key=value形式指名道姓的為形參傳值,可以完全不按照順序
1.關鍵字實參必須在位置參數的後面
2.可以混用位置實參與關鍵字實參,但不能為同一個形參重復傳值
默認參數:
形參有默認值
可變長參數
形參:*args,**kwargs將多余的參數分別封裝成元祖與字典
實參:將args kwargs分別打散
什麽是命名關鍵字參數?
格式:在*後面參數都是命名關鍵字參數
特點:必須被傳值
2.約束函數的調用者必須按照key=value的形式傳值
3.約束函數的調用者必須使用我們指定的鍵名
在面向對象編程中,一切皆對象
具體的體現為:
1:函數可以被引用
2:函數可以作為函數的參數
3:函數可以作為函數的返回值
4:可以被存儲到容器類型中
2.函數嵌套
1.嵌套調用:在一個函數中調用了另一個函數
2:嵌套定義 在一個函數中定義了另一個函數
3.名稱空間
存儲變量名與值綁定關系的地方
名稱空間的分類
內置名稱空間:存儲解釋器自帶的一些名稱與值得對應關系
(Python解釋器啟動時創建所有代碼全部執行完畢 關閉解釋器時銷毀)
如 print len max min
全局名稱空間 哪些數據在全局空間?
文件級別的名稱 只要你的名字的定義是頂著最左邊寫的就是全局空間
除了內置的函數內的,都在全局中(執行Python文件創建全局名稱空間 關閉解釋器時 銷毀)
局部名稱空間 只要是函數內的名稱就是局部的
(調用函數時創建 函數執行完畢時銷毀)
名稱空間的加載順序
內置的-全局的-局部的
名稱的查找順序
局部-全局的-內置的
4.作用域(作用範圍)
域 指的是區域 範圍的意思
全局的名稱空間和內置的名稱空間 在使用上沒什麽區別
局部的和全局的內置的 就區別了 局部定義的只能在局部使用
給三個空間劃分範圍
全局的和內置可以劃分為同一個範圍
global表示的全局範圍,就是所謂的全局作用域
局部的單獨劃分為一個範圍
local 局部作用域
5.閉包函數
閉包函數 也是一個函數
與普通函數的區別
1.定義在另一個函數中的
2.在這個內部的函數中使用了外部的名稱
閉包函數,當調用一個函數內部的函數時,還將返回外部函數的數據,這樣的函數稱之為閉包函數:定義在一個函數內部,且訪問外部函數的數據
函數的作用域在定義時就固定了,與調用的位置毫無關系
——closure_用於訪問閉包時,打包的數據
為函數體傳值的方式
方式一:將值以參數的形式的傳入
方式二:在函數內部為變量賦值
什麽是裝飾器?
什麽是裝飾 給一個已有的對象(一個函數)添加新的功能
為什麽要裝飾 增強功能
裝飾器就是給其他函數添加功能的函數
無參裝飾器格式:
def outer(func):
def inner(*args,**kwargs):
res = func()
return res
return inne
開放關閉原則
軟件一旦上線後,就應該遵循開放關閉原則,即對修改源代碼是封閉的,對功能的擴展是開放的
也就是說我們必須找到一種解決方案
能夠在不修改一個功能源代碼以及調用方式的前提下,為期加上新功能
總結:原則如下
1.不修改源碼
2.不修改調用方式
目的:在遵循一二的基礎上擴展新功能
裝飾器與被裝飾器的對象均可以是任意可調用的對象
函數嵌套與裝飾器