初識函數 1.什麼是函數 具有封裝功能的代碼塊。 2.函數的定義,函數名,函數體以及函數的調用。 1.定義函數,使用def def 函數名(): 函數體 2.函數名,跟變數的命名規範基本相同 3.函數體,具體要執行的的功能 4.函數的調用:使用函數名可以調用函數,寫法:函數名(),這個函數已經被調用 ...
初識函數
1.什麼是函數
具有封裝功能的代碼塊。
2.函數的定義,函數名,函數體以及函數的調用。
1.定義函數,使用def
def 函數名():
函數體
2.函數名,跟變數的命名規範基本相同
3.函數體,具體要執行的的功能
4.函數的調用:使用函數名可以調用函數,寫法:函數名(),這個函數已經被調用,裡面的函數體會被執行
註意:函數只要調用才能執行裡面的代碼
3.函數的返回
執行完函數之後,我們可以使用return來返回一個結果。
1.不寫return,預設返回None
2.只寫return,返回None
3.return “jskdf”,返回一個字元串,後面可以是任何可以返回的代碼段。
4.return後面返回了多個結果,則調用者可以接受一個tuple,直接解構成多個變數
4.函數的參數
在調用函數時,可以給函數傳遞一個或者多個參數。參數可以是數字,字元串,列表,元組,字典等等。
1.形參:寫在函數聲明的位置的變數叫形參,形式上的一個變數,可以用任何值來表示。
2.實參:函數調用時給函數傳遞的值,叫實參,是函數真正意義上需要的值。
3.傳參:給函數傳遞消息的時候將實參的值傳遞給形參,函數內部就可以用這個形參的值了。
4.參數的分類
1.位置參數,大概意思就是按照位置的順序把實參傳遞賦值到對應的形參中
2.關鍵字參數:函數中的參數非常多就可以使用關鍵字參數了,只需要記住參數的名字,註意:使用關鍵字參數可以隨意更換參數的順序,不過不建議,對稱比較好看。
3.混合參數,把位置參數和關鍵字參數回合使用,但是要註意的是,關鍵字參數必須要寫在位置參數的後邊,否則會報錯。
綜上所述:從實參的角度來看,分為這三種,形參較為複雜。(位置參數,預設值參數,動態參數)
函數進階
1.函數參數--動態傳參
適用於參數不確定或者參數太多。
1.動態接收位置參數。動態參數必須放到最右邊,當然也可以用關鍵字參數
2.動態接收關鍵字參數。使用**kwargs
註意:關鍵字參數必須放在位置參數後邊。
最終順序:位置參數>*args>預設值參數>**kwargs,這四種參數可以任意的進行使用。
3.動態傳參的另一種方式,用*把可迭代對象按照順序打散,用**可以把字典打散。
2.命名空間
在python解釋器開始執⾏之後, 就會在記憶體中開闢⼀個空間, 每當遇到⼀個變量的時候, 就 把變量名和值之間的關係記錄下來, 但是當遇到函數定義的時候, 解釋器只是把函數名讀入內 存, 表示這個函數存在了, ⾄於函數內部的變量和邏輯, 解釋器是不關心的. 也就是說⼀開始 的時候函數只是載入進來, 僅此⽽而已, 只有當函數被調⽤和訪問的時候, 解釋器才會根據函數 內部聲明的變數來進⾏開闢變量的內部空間. 隨著函數執⾏行完畢, 這些函數內部變數占⽤的空 間也會隨著函數執⾏完畢⽽而被清空.
我們給存放名字和值的關係的空間起⼀一個名字叫: 命名空間. 我們的變數量在存儲的時候就 是存儲在這片空間中的.
命名空間分類:
1. 全局命名空間--> 我們直接在py⽂文件中, 函數外聲明的變量都屬於全局命名空間
2. 局部命名空間--> 在函數中聲明的變數會放在局部命名空間
3. 內置命名空間--> 存放python解釋器為我們提供的名字, list, tuple, str, int這些都是內 置命名空間
載入順序:
1. 內置命名空間
2. 全局命名空間
3. 局部命名空間(函數被執⾏的時候)
取值順序:
1. 局部命名空間
2. 全局命名空間
3. 內置命名空間
作⽤域: 作⽤用域就是作⽤用範圍, 按照⽣生效範圍來看分為 全局作⽤用域和局部作⽤用域
全局作用域: 包含內置命名空間和全局命名空間. 在整個⽂件的任何位置都可以使用(遵循 從上到下逐⾏執⾏). 局部作⽤用域: 在函數內部可以使⽤.
作用域命名空間:
1.全局作用域:全局命名空間+內置命名空間
2.局部作用域:局部命名空間
3.函數的嵌套
很簡單,一個函數中包含著另一個函數。
4.global,nonlocal關鍵字
這個題弄懂,,作用域就差不多了。