函式引數的概念
函式引數的兩大分類
形參 和 實參
形參:在函式定義中從左向右寫入的變數名就叫做形式引數,簡稱 形參
下圖中的a 和 b 就是形參
實參:在函式呼叫階段從左往右依次寫入的變數值就叫實際引數,簡稱 實參
下圖中的 1 和 2 就是實參
形參和實參相當於 變數名 和 變數值。
變數名 與 變數值 在函式呼叫階段 臨時呼叫,函式執行結束之後,則斷開立馬斷開連線
## 注意點:
# 形參的表現形式就一種
# 實參的表現形式有多種
位置引數 和 關鍵字引數
位置引數:
# 從左往右依次寫入的資料就是位置引數
位置形參
# 在定義函式的時候,從左往右依次寫入的變數名就是位置形參(如下圖中的 a b)
位置實參
# 在函式呼叫階段,從左往右依次寫入的變數值就是位置實參(呼叫函式func()時,輸入的1,2)
關鍵字引數:
下午中的a , b 就是關鍵字
'''位置形參和位置實參的關係:
位置實參從左往右依次傳遞給位置實參(一一對應)
'''預設引數
在定義函式階段,分兩種情況:
1.如果沒有給形參傳遞值,那就使用預設的
2.如果給形參傳遞了值,那就用傳遞的值
3.預設引數只要不放在 **kwargs 後面都可以
下圖中 a 和 b 傳了 實參 1 和 2 ,c沒有傳值,那就是預設9,如果傳了值,那就用上傳的值
可變長引數
1 無論在函式呼叫階段,傳多少個引數都可以, *args(*號後面可以為任意,args是python中約定促成的規定)輸出的結果是元祖,如下圖
2 無論我在函式呼叫階段傳遞多少個 關鍵字實參 都可以。函式中以**kwargs(同樣只是約定俗成)
**kwargs 輸出的結果 是 字典(把多餘的關鍵字引數賦給了**號後面的變數名)
3 無論我在函式呼叫階段傳遞多少個位置引數和關鍵字引數都可以,如下圖
組合使用
綜上所述所有引數可任意組合使用,但定義順序必須是:位置引數、預設引數、*args、命名關鍵字引數、**kwargs
位置實參1被*接收,以元組的形式儲存下來,賦值給args,即args=(1,),關鍵字實參z=3,y=2被**接收,以字典的形式儲存下來,賦值給kwargs,即kwargs=
然後再啟用func(),得到結果1,2,3
命名空間的概念
1. 什麼是命名空間?
就是繫結變數名和變數值的地方
2. 命名空間的分類:
-1 內建命名空間
在python直譯器中
len()
print()
open()
-2 全域性空間名稱
靠邊定格寫的名稱,是全域性空間名稱
-3 區域性命名空間
# 在函式體中存在的都是區域性的
名字的查詢順序
1. 看自己位置在**:
如果在區域性:區域性 >>> 全域性 >>> 內建
如果在全域性: 全域性 >>> 內建
#拓展面試題區域性命名空間的巢狀:
deff1():
#x = 222
deff2():
#x = 333
deff3():
#x = 444
deff4():
#x = 555
deff5():
#x = 666
(x) f5()
f4()
f3()
f2()
f1()
下圖中輸出的結果,是什麼,原理又是什麼
輸出結果中,其中 z 值 是之前的100
通過z 重新賦值之後,z同樣指向100的記憶體位址,即z = 100(這裡相當於成了預設引數) 和 a = 100
函式func內部,對 a 重新賦值之後,a 指向乙個新的記憶體位址200
所以,輸出的結果,是 1,2,100和 200
Python 函式以及引數傳遞
函式簡介 function 函式也是乙個物件 物件是記憶體中專門用來儲存資料的一塊區域 函式可以用來儲存一些可執行的 並且可以在需要時,對這些語句進行多次的呼叫 建立函式 def 函式名 形參1,形參2,形參n 塊 函式名必須要符號識別符號的規範 可以包含字母 數字 下劃線 但是不能以數字開頭 函式...
python中lambda函式以及map函式複習
斷更很久了今天來複習下python中lambda函式的使用 def test x return x x 這裡我們用lambda定義乙個匿名的內聯函式。請注意,該函式沒有名稱。test 是儲存建立的lambda函式的變數的名稱 上面的函式和下面的lambda函式是一樣的 test f lambda x...
(14)shell 函式以及函式引數
函式可以讓我們將乙個複雜功能劃分成若干模組,讓程式結構更加清晰,重複利用率更高。shell 函式必須先定義後使用。function name 如果你願意,也可以在函式名前加上關鍵字 function function function name 注意 函式返回值,可以顯式增加return語句 如果不...