python基礎語法總結(二)-- 函式function
阿新 • • 發佈:2018-12-22
python基礎語法總結(一)-- python型別轉換函式+檔案讀寫
目錄
一. 函式定義
函式定義使用def關鍵字,使用接下來是方法名和入參,最後是冒號:
函式方法體在第一行下面,並且縮排若干空格(一般習慣4格)。所有保持同一縮排
'''函式定義'''
def function_1(arg1, arg2):
"""定義一個函式""" # 函式的註釋,會出現在help()的列印結果中
print("arg1=" + arg1 + ", arg2=" + arg2)
return
二. 函式與入參
1. 函式傳參的方式
- 位置傳參
- 關鍵字傳參
- 入參預設值
'''函式傳參方式''' ### 1 位置傳參 function_1("1", "2") # 列印 arg1=1, arg2=2,呼叫時將第一個入參"1"傳入函式定義時的第一個引數arg1,第二個入參"2"傳入arg2 ### 2 關鍵字傳參 function_1(arg1="1",arg2="2") # 直接指定arg1傳入"1", arg2傳入"2" function_1("1",arg2="2") # 也可以只指定一個關鍵字入參,但必須放在最後 ### 3 入參預設值 def function_2(arg1, arg2="2", arg3="3"): # 定義函式時,直接對arg3入參設定預設值"3".有預設值的引數一定要放在最後 print("arg1=" + arg1 + ", arg2=" + arg2 + ", arg3=" + arg3) function_2("1","2","3") # 列印arg1=1, arg2=2, arg3=3 function_2("1","2") # 即使沒有傳入arg3,也不會報錯,預設arg3賦值"3",列印:arg1=1, arg2=2, arg3=3 function_2(arg3="3", arg1="1", arg2="2") # 全部使用關鍵字傳參時,順序可以顛倒 function_2(arg1="1", arg2="2") # 不傳arg3也不報錯,使用預設值
注意:在呼叫函式時,如果有位置傳參和關鍵字傳參兩種方式
1. 位置傳參必須放在關鍵字傳參之前
2. 位置傳參的順序必須和函式定義時的順序一致
###
"""注意:在呼叫函式時,如果有位置傳參和關鍵字傳參兩種方式
1. 位置傳參必須放在關鍵字傳參之前
2. 位置傳參的順序必須和函式定義時的順序一致
"""
# function_1(arg1="1","2") 這種寫法會報錯:positional argument follows keyword argument,不能將關鍵字傳參放在位置傳參前
# function_1("2",arg1="1") 這種寫法會報錯:got multiple values for argument 'arg1'
# 位置傳參已經給arg1傳入"2"(位置傳參這個位置,只能傳給arg1),後面又用關鍵字傳參給arg1傳入"1",因此係統報錯
function_2("1", arg3="3", arg2="2") # 當位置傳參正確時,後面的關鍵字傳參順序可以打亂
function_2("1", arg3="3") # 當位置傳參正確時,後面的關鍵字傳參可以省略部分或全部
# 總之,要先列出沒有預設值的形參,再列出有預設值的形參,要避免傳參歧義
2. 入參如果傳入列表,可能被函式改變其中內容
'''注意點:傳入列表,入參可能被函式方法改變'''
l1 = list(range(1,10,2)) # l1 = [1, 3, 5, 7, 9]
def function_3(init_list):
for i in range(len(init_list)):
init_list[i] = init_list[i] + 1 # 每一項都加一
function_3(l1) # 呼叫function_3函式
print(l1) # l1會被改變,列印結果:[2, 4, 6, 8, 10]
要避免改變原入參,可以用以下實現:
### 避免改變原入參的實現
l1 = list(range(1,10,2)) # l1 = [1, 3, 5, 7, 9]
function_3(l1[:]) # 傳入l1的副本
print(l1) # l1 沒有被改變,仍為[1, 3, 5, 7, 9]
3. 傳遞任意數量的實參
# 傳遞任意數量的實參
def multi_args(a, *args): # 可傳入多個引數,數量不定, 不定數量引數要放在最後;args是個空元組,並將傳入的引數都放在args中
print(args)
multi_args(1,2,3,6,5,4) # 成功執行,列印:(2, 3, 6, 5, 4),a賦值為1
# 使用任意數量的關鍵字實參
def multi_key_args(a, b, **key_args): #key_args本質上是空字典,並將傳入的多個關鍵字入參都放入此引數中
print(key_args)
multi_key_args(1, 2, first=3, second="ss") #輸出: {'first': 3, 'second': 'ss'}
# multi_key_args(1, 2, 9, first=3, second="ss") 這樣寫會報錯 multi_key_args() takes 2 positional arguments but 3 were given, 說明**只能傳入關鍵字的引數
三. 匿名函式 lambda
'''匿名函式 lambda關鍵字'''
fun = lambda x: x * x # 使用lambda關鍵字,定義一個匿名函式,返回平方,並將這個匿名函式傳給fun
fun(5) # 通過呼叫fun(x)來呼叫匿名函式,本例:25
### 匿名函式更多用在需要傳遞函式入參的地方
def function_out(a, fun): # 準備工作,定義一個函式function_out(),其中第二個入參是函式型別的入參
return fun(a) + 1
# 可以直接在呼叫某個函式時,在其入參的響應位置建立匿名函式並傳參,起到精簡程式碼的作用
result = function_out(3, lambda x: x + 5) # 計算第一個入參+5之後再+1的值,本例:result = 9
result = function_out(3, lambda x: x ** 2) # 計算第一個入參平方後再+1的值,本例:result = 10