函式巢狀與裝飾器
*應用場景,位置引數中代表將多個引數存入元祖,**將關鍵字引數傳入字典
位置引數:
位置形參:必須被傳值,一一對應
位置實參:按從左到右的順序與形參一一對應
關鍵字引數:按照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.不修改呼叫方式
目的:在遵循一二的基礎上擴充套件新功能
裝飾器與被裝飾器的物件均可以是任意可呼叫的物件