1. 預設引數
1.1預設引數概念
預設引數指函式/方法在定義時為形參賦值,對應的形參稱為預設引數。
預設引數是一個引數定義期的概念,與呼叫無關。
1.2預設引數作用
如果引數定義預設引數,在呼叫函式方法時,未對該引數進行傳值,則使用預設值作為該引數的值。
1.3預設引數基本語法
定義格式:
def 函式名(形參1 = 值1,…):
函式體
……
呼叫格式一(同普通引數,無特殊):
函式名(實參) 使用實參作為形參的值,不使用預設值複製程式碼
呼叫格式二:
函式名() 使用預設值作為形參的值複製程式碼
def test(a,b=100):
pass
test(5)複製程式碼
1.4注意事項
1.預設引數的定義必須在位置引數的右側
def test(b=100,a): # 位置引數在預設引數右邊,報錯
pass複製程式碼
2.預設引數在呼叫傳值時,按照位置引數進行對待,從左至右依次賦值,不能跳過左側的某個引數直接為後面的引數賦值
def test(a,b=100,c=5):
pass
test(5,6,7)複製程式碼
2. 關鍵字引數
2.1關鍵字引數概念
2.2關鍵字引數作用
按名稱確認實參為指定的形參賦值,呼叫函式時使用。
2.3關鍵字引數基本語法
定義格式(同普通引數定義,無特殊):
def 函式名(形參 ,…):
函式體
呼叫格式: 函式名( 形參名 = 實參)複製程式碼
def test(a=5,b=100):
pass
test(b=7)
# a=5 b=7複製程式碼
2.4注意事項
1.關鍵字引數必須出現在位置引數的後面
2.不允許使用關鍵字引數對同一個形參進行多次賦值
3.關鍵字引數既可以為位置引數賦值,也可以為預設引數賦值。通常使用關鍵字引數解決預設引數選擇性賦值問題。
3. 可變引數
3.1可變引數概念
3.2可變引數作用
3.3可變引數基本語法
定義格式
def 函式名(*args ,…):
函式體
呼叫格式(同普通引數,無特殊):函式名( 實參1,…… )
def sum(*args):
sums = 0
for num in args:
sums += num
print(sums)
sum(1,2,3,4,5)複製程式碼
3.4注意事項
def test( a , b , *args , c = 1 ):
pass複製程式碼
4. 字典引數
4.1字典引數概念
函式/方法在定義時,定義一個特殊的形參,用於接收未定義直接使用的關鍵字引數,對應的形參稱為字典引數。
4.2字典引數作用
4.3字典引數基本語法
定義格式:
def 函式名(**kwargs ,…):
函式體
呼叫格式: 函式名( 未定義的變數名1 = 實參1,未定義的變數名2 = 實參2,…… )
def test(**kwargs):
test(a=1,b=2) 複製程式碼
def test(m,**kwargs):
print(m)
print(kwargs)
test(x=1,y=2,m=1)
# 輸出 1
# {'x': 1, 'y': 2}複製程式碼
4.4注意事項
1.字典引數在一個函式/方法定義中只能出現一個。
2.定義函式的引數時,先定義位置引數,再定義可變引數,然後定義預設引數,最後定義字典引數
def test( a , b , *args , c = 1 ,**kwargs):
pass test(1,2)# 輸出 a = 1 b = 2
args = ()
c = 1
kwargs = {}
test(1,2,c=5)# 輸出 a = 1 b = 2 args = () c = 3 kwargs = {}
test(1, 2, 3, 'a', 'b') # 輸出 a = 1 b = 2 args = (3, 'a', 'b') c = 0 kwargs = {}
test(1, 2, 3, 'a', 'b', x=55)
# 輸出 a = 1 b = 2 args = (3, 'a', 'b') c = 0 kwargs = {'x':55}複製程式碼
3.對於任意函式,都可以通過類似func(*args, **kwargs)
的形式呼叫它,無論它的引數是如何定義的。
使用*args
和**kwargs
是Python的習慣寫法,當然也可以用其他引數名。
*args
是可變引數,*args
接收的是一個tuple
;
**kwargs
是關鍵字引數,**kwargs
接收的是一個dict
。
4.5其他
所有的容器都支援解包操作。
def test(a, b, c):
print(a, b, c)
list1 = [1, 2, 3]
dict1 ={'a': 1, 'b': 2, 'c': 3}
test(*list1) # 1 2 3
test(**dict1) # 1 2 3複製程式碼
如果要強制傳入的引數為關鍵字引數,之後的引數必須以關鍵字引數的形式傳遞,稱之為引數槽。以一個*
表示。引數槽通常和預設引數搭配使用。
def test(a, b, *, x, y):
print(a, b)
print(x, y) # TypeError: test() takes 2 positional arguments but 4 were given
test(1, 2, x=3, y=4) # 輸出 1 2 3 4 複製程式碼
5. 遞迴函式
5.1遞迴函式概念
函式/方法在執行過程中出現了對自身函式/方法的呼叫,稱該過程為遞迴呼叫,稱這樣的函式為遞迴函式。
5.2遞迴函式基本語法
同普通函式
5.3遞迴函式定義要求
1.函式體中具有對自身函式的呼叫
2.函式體中具有明確的函式執行結束判定條件
"""使用遞迴的方法列印出前n個斐波那契數列1,1,2,3,5,8,13...."""
def fb(n):
if n == 1 or n == 2:
return 1
return fb(n - 1) + fb(n - 2)
s = fb(4)
print(s)複製程式碼
5.4遞迴函式呼叫要求
Python語言中函式呼叫最大層級為1000層,超過該層級,程式將報錯,遞迴的效率很低,實際開發很少用。
# 如果需要設定遞迴深度,可以使用sys模組中的setrecursionlimit()函式修改預設的最大深度限制。
import sys
sys.setrecursionlimit(2000)複製程式碼
6. 匿名函式
6.1匿名函式概念
匿名函式即沒有名稱的函式,在python語言中,匿名函式是使用lambda
關鍵字定義的一個特殊表示式,也稱為lambda
表示式。
6.2匿名函式基本語法
# 格式一:
# 定義: 函式名 = lambda 形參 : 返回值
# 呼叫: 結果 = 函式名(實參)
add = lambda a,b : a + b
c = (2,3)
# 格式二:
# 定義並呼叫: #結果 = (lambda 形參 : 返回值)(實參)
c=(lambda a,b : a + b)(2,3) 複製程式碼
6.3匿名函式特殊語法
無參格式:
結果 = (lambda :返回值)()
f1 = (lambda : 100)() 複製程式碼
多返回值格式:可使用資料儲存模型返回多個資料
f2, f3 = (lambda: (3, 4))()
print(f2)
print(f3)
f4 = (lambda: [a ** 2 for a in range(5) if a % 2 == 0])()
print(f4) #輸出 [0, 4, 16]複製程式碼
無返回值格式:必須有具體值或結果為None
x = (lambda: (print("hello"), print("python")))()print(x)複製程式碼