python函式的引數
1.單個引數
場景:需要動態的調整函式中某一個處理資訊。則可以,以引數的形式接收到相關資料。
定義:def 函式名(引數名稱):
函式體->函式體中,可以直接以變數的形式使用該引數。
函式的呼叫:函式名(引數值)
形參和實參的概念:上述定義中,“引數名稱”即為形參。在呼叫函式的時候,傳遞真實資料,即為實參。
案例程式碼:
def test(num): print(num * 1) print(num * 2) print(num * 3) test(3)
2.多個引數
場景:需要動態調整函式體中多個處理資訊時,則可以使用“逗號”做分割。接收多個引數。
定義:def 函式名(引數名稱1, 引數名稱2)
函式體->函式體中,可以直接以變數的方式使用所有引數。
呼叫:方式1->函式名(引數1, 引數2, 引數3,......)->形參和實參一一對應。
def mySum(x, y): print(x + y) mySum(1, 2)
方式2->函式名(引數名稱1=引數1, 引數名稱2=引數2, 引數名稱n=引數n,......)->可以指明形參名稱->稱為“關鍵字引數”
不需要嚴格按照順序
mySum(x=2, y=10)
3.不定長引數
場景:如果函式體中,需要處理的資料,不確定長度,則可以以不定長引數的方式接收資料。
方式1:def 函式名(*args):->形參前面加上*號,形參預設為是元組,使用的時候只加一層括號就好
函式體->函式體中,可以直接以元組變數的方式使用該引數。
使用:函式名(引數1, 引數2, 引數3, ......)
def mySum(*t): print(t, type(t)) sumi = 0 for v in t: sumi += v print(sumi) mySum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
方式2:def 函式名(**dic): ->字典
函式體->函式體重中,可以直接以字典變數的方式使用該引數。
使用:函式名稱(引數名稱1=引數1, 引數名稱2=引數2, ......)
def mySum(**kwargs): print(kwargs, type(kwargs)) mySum(name=18, age=2)
**引數的拆包:
裝包->把傳遞的引數,包裝成一個集合,稱之為“裝包”
def test(*args): print(args)
test(1, 2, 3, 4, 6)
拆包->把集合引數,再次分解成單獨的個體,稱之為“拆包”
def test(*args): print(*args) test(1, 2, 3, 4, 6)
應用案例:
def mySum(a, b, c, d, e): print(a + b + c + d + e) def test(*args): print(args) print(*args) mySum(args[0], args[1], args[2], args[3], args[4]) mySum(*args) test(1, 2, 3, 4, 6)
應用案例2:
def mySum(a, b): print(a) print(b) def test(**kwargs): print(kwargs) # 使用兩個星星進行拆包操作 # print(**kwargs) mySum(**kwargs) test(a=1, b=2)
4.預設引數:
場景:當我們使用一個函式的時候,如果大多情況下,使用的某個資料是一個固定值,或屬於主功能之外的小功能實現。則可以使用預設值->這種引數,成為“預設引數”。
定義:def 函式名(變數名1=預設值1, 變數名2=預設值2)
函式體->函式體中,即使外界沒有傳遞指定變數,也可以使用,只不過值給定的是預設值。
使用:函式名(變數1, 變數2)->此處如果是預設引數,則可以不填寫。
def hit(somebody="豆豆"): print("我想打", somebody) hit("陽光") hit()
5.引數注意:
值傳遞和引用傳遞:
值傳遞->是指傳遞過來的,是一個數據的副本,修改副本對原件沒有任何影響。
引用傳遞->是指傳遞過來的,是一個變數的地址,通過地址可以操作同一份原件。
但是注意:
在python中,你沒得選擇,只有引用傳遞(地址傳遞)
但是,如果資料型別是可變型別,則可以改變原件。如果資料型別是不可變型別,則不可以改變原件。
def change(num): print(id(num)) print(num) b = 10 print(id(b)) change(b)