1. 程式人生 > 實用技巧 >day10 python之函式的引數

day10 python之函式的引數

函式的基本屬性

1.1 函式的含義

# 1、功能 :包裹程式碼,實現功能,達到目的
# 2、特點 :反覆呼叫,提高開發效率,便於程式碼維護

1.1.2 函式的基本格式

# 函式名 :變數命名規則
# 函式的定義
def func():
pass
# 函式的呼叫
func()

1.2 函式的引數

1.2.1形式引數(函式定義處)

# 形式引數的順序
# 位置引數 > 預設引數 > *args > 命名關鍵字引數 > **kwargs

1.2.1.1 位置引數

def func(a,b):
print(a,b)

1.2.1.2 預設引數

def func(a = 0,b = 9):
print(a,b)

1.2.1.3 位置引數 + 預設引數

"""
預設形參必須跟在位置形參的身後,順序是一定的
"""
def func(a ,b ,c = 4 , d = 5):
print(a,b,c,d)

1.2.2 實際引數(函式呼叫處)

1.2.2.1 位置傳參

"""
在函式呼叫時:實引數量及順序需要與形參一一對應
"""
def func(a,b):
print(a,b)
func(5,8) # 5 8
func(8,5) # 8 5

1.2.2.2 關鍵字傳參

"""
在函式呼叫時:
如果給予實參,那麼直接使用實際引數
如果沒有給予實參,那麼使用引數預設自帶的值
"""
def func(a = 0,b = 9):
print(a,b)
func(5,8) # 5 8
func(8,5) # 8 5
func(1) # 1 9

1.2.2.3 位置傳參 + 關鍵字傳參

"""
1、關鍵字傳參是對具體的某個引數賦值,具體的順序可以打亂
2、關鍵字實參必須跟在位置實參的身後,順序是一定的
3、預設引數和關鍵字實參 在寫法上一模一樣
一個是在函式的定義處
一個是在函式的呼叫處
"""
def func(a,b,c,d,name = "name",age = 18):
print(a,b,c,d,name,age) func(1,2,3,4,age = 20 , name = "bajie") # 1 2 3 4 bajie 20
func(1,2,3,age = 20,4 , name = "bajie") # error

1.2.3 收集引數( *args , **kwargs)

1.2.3.1 收集引數 (在函式的定義處 -----> 聚合)

# *args 在函式的定義處專門用來收集多餘的沒人要的 位置實參
def func(a,b,c,*args):
print(a,b,c) # 1 2 3
print(args) # (4, 5, 5, 6, 7, 8) func(1,2,3,4,5,5,6,7,8)

# **kwarge 在函式的定義處專門用來收集多餘的沒人要的 關鍵字實參
def func(a=1,b=2,c=3,**kwargs):
print(a,b,c) # 15 16 17
print(kwargs) # {'f': 1, 'g': 2, 'j': 3}

func(f=1,g=2,j=3,a=15,b=16,c=17)

1.2.3.2 收集引數 (在函式的呼叫處 -----> 打散)

# * 把列表裡面的所有元素拿出來,當成引數一個一個賦值給func進行呼叫
def func(a,b,c = 5,d = 6):
print(a,b) # 1 2
print(c,d) lst = [1,2]
func(*lst,c=3,d=4)
# **把字典裡面的所有元素拿出來,拼裝成鍵=值的引數形式,賦值給func進行呼叫
def func(a,b,c = 5,d = 6):
print(a,b)
print(c,d) # 3 4

dic = {"c":3,"d":4}
func(1,2,**dic,)

1.2.3.3 練習示例

# 任意個數字串的拼接
"""
班長:宋雲傑
班花:劉彩霞
班草:劉子濤
吃瓜群眾:牧樹人,晏國彰,劉聰
"""
def func(**kwargs):
print(kwargs)
# 定義一個字典,存放每一位同學的身份
dic = {"monitor":"班長","class_flower":"班花","class_grass":"班草"}
strvar1 = ""
strvar2 = "" # 遍歷字典中的鍵值對
for k,v in kwargs.items():
print(k,v) # monitor 宋雲傑 class_flower 劉彩霞 class_grass 劉子濤 ....
# 判斷鍵是否在字典當中,如果在,獲取對應的身份,拼裝成字串
if k in dic:
strvar1 += dic[k] + ":" + v + "\n" # 班長 + ":" + 宋雲傑 + '\n'
else:
strvar2 += v + "," # 去掉右邊多餘的\n和,形成最後的效果
print(strvar1.strip())
print("吃瓜群眾:"+ strvar2.rstrip(","))

1.2.4 命名關鍵字引數

"""
定義命名關鍵字引數的兩種方式:(在函式呼叫時,必須使用命名關鍵字引數來進行賦值)
(1)def func(a,b,*,c) c是命名關鍵字
(2)def func(*args,c,**kwargs) c是命名關鍵字引數
"""
# 定義方式一
def func(a,b,*,d,c):
print(a,b) # 1 2
print(d) # 3
print(c) # 10 func(1,2,d = 3,c=10)

# 定義方式二
def func(*args,c,**kwargs):
print(args) # (1, 2, 3, 4, 5, 6)
print(c) # 100
print(kwargs) # {'a': 1, 'b': 2, 'd': 6} func(1,2,3,4,5,6,a=1,b=2,d=6,c=100)

1.2.5 引數練習題

# 讀程式碼測結果
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

# 以上兩個函式 列印結果
#(一)
f1(1, 2)
f1(1, 2, c=3)
f1(1, 2, 3, 'a', 'b')
f1(1, 2, 3, 'a', 'b', x=99)
f2(1, 2, d=99, ext=None)

#(二)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args, **kw)

#(三)
myargs = (1, 2, 3)
mykw = {'d': 88, 'x': '#'}
f2(*myargs, **mykw)

#(四)
def f1(a, b, c=0, *args,d,**kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
print(d)
f1(1,2,3, 'a', 'b',d=67, x=99,y=77)