7.1 函式的定義
- 概念:功能(包裹一部分程式碼,實現某一功能,達成某一個目的)
- 特點:可以反覆呼叫,提高程式碼的複用性,提高開發效率,便於維護管理
7.1.1 函式基本格式
# 定義函式
def 函式名():
code
#呼叫函式
函式名()
7.1.2 函式的命名
- 命名規範:
- 字母、數字、下劃線,且字母不能為數字
- 嚴格區分大小寫,且不能使用關鍵字
- 函式命名有意義,且不能使用中文
- 駝峰命名法:
- 大駝峰命名法:每個單詞的首字母要大寫:
- mycar => Mycar
- 小駝峰命名法:除了第一個單詞首字元小寫外,剩下的單詞首字母大寫
- mycar => myCar
- 命名法:可以將不同單詞用_拼接在一起
- mycar => my_car
- symmetric_difference
def ctf_99(): for i in range(1, 10): for j in range(1, i + 1): print("{:d}*{:d}={:2d}".format(i, j, i * j), end="") print() for i in range(5): ctf_99()
- 大駝峰命名法:每個單詞的首字母要大寫:
7.1.3 函式的引數
- 引數:函式運算時需要的值
- 形參:形式引數,在函式的定義處
- 普通形參(位置形參)
- 預設形參
- 普通收集形參
- 命名關鍵字形參
- 關鍵字收集形參
- 實參:實際引數,在函式的呼叫處
- 普通實參
- 關鍵字實參
- 形參:形式引數,在函式的定義處
- 原則:形參和實參要一 一對應
7.1.3.1 普通形參(位置形參)
# 定義函式
# a,b普通形參,在函式定義處
def func(a,b):
print(a)
print(b)
# 呼叫函式
# 1,2普通實參,在函式的呼叫處
func(1,2) # 1,2
7.1.3.2 預設形參
a,b預設形參,在函式定義處
如果給予實參,那麼使用實參
如果沒有給予實參,那麼使用引數身上的預設值
"""
def func(a=1,b=2):
print(a)
print(b)
func() # 1,2
func(10,20) # 10,20
func(10) # 10,2
7.1.3.3 普通形參 + 預設形參
# 普通形參必須放到預設形參的前面不能調換位置
# 正確:
def func(a,b=2):
print(a)
print(b)
func(10)
# 錯誤:
def func(b=2,a):
print(a)
print(b)
func(10,20)
7.1.3.4 關鍵字實參
"""
1.如果都是關鍵字實參,可以任意調整實參的順序
2.普通實參必須寫在關鍵字實參的前面
"""
def func(a,b,c,d=1)
print(a,b)
print(c,d)
# 具體定製引數的值叫做關鍵字實參,在函式的呼叫處
func(a=1,b=2,c=7,d=6)
func(a=1,b=2,5,d=6) # error報錯
7.1.3.5 收集形參
7.1.3.5.1 普通收集形參
-
專門用來收集那些多餘的沒人要的普通實參
-
收集之後,會把多餘實參打包成一個元組
# arg => arguments
def func(a,b,c,*args):
print(a,b,c) # 1 2 3
print(args) # (4,5,6)
func(1,2,3,4,5,6)
# 任意個數值的累加和
def sum(*args):
total = 0
for i in args:
total += i
print(i)
sum(1,10)
7.1.3.5.2 關鍵字收集形參
- 專門用來收集那些多餘的沒人要的關鍵字實參
- 收集之後,會把多餘關鍵字實參打包成一個字典
# kwargs => keyword arguments
def func(a,b**kwargs):
print(a,b) # 1 2
print(kwargs) # {'c': 3, 'd': 4}
func(a=1,b=2,c=3,d=4)
# 拼接任意個數值變成字串
"""
班長: 趙萬里
班花: 馬春賠
吃瓜群: 美羊羊,沸羊羊,灰太狼
"""
def func (**kwargs):
strvar1 = ""
strvar2 = ""
# 定位職位資訊
dic = {"monitor":"班長","classflower":"班花"}
print(kwargs)
for k,v in kwargs.items():
if k in dic:
# 將2次迴圈的結果透過+=拼接在一起
strvar1 += dic[k] + ":" + v +"\n"
print(strvar1)
else:
# 將3次迴圈的結果透過+=拼接在一起
strvar2 += v +","
print(strvar1.strip())
print("划水群眾:",strvar2.strip(","))
func(monitor="趙萬里",classflower="馬春賠",water1="美羊羊",water2="沸羊羊",water3="灰太狼")
7.1.3.6 命名關鍵字引數
"""
# 命名關鍵字引數
(1) def func(a,b,*,c,d)跟在*號後面的c和d
(2) def func(*args,e,**kwargs)加在*args和**kwargs之間的引數都是命名關鍵字引數
命名關鍵字引數:在呼叫函式時,必須使用關鍵字實參的形式來進行呼叫
"""
# 定義方法一:
def func(a, b, *, c, d):
print(a, b) # 1 2
print(c, d) # 3 4
# 必須指定關鍵字實參,才能對命名關鍵字形參進行賦值
func(1, 2, c=3, d=4)
# 定義方法二:
def func(*args, e, **kwargs):
print(args) # (1, 2, 3, 4)
print(e) # 3
print(kwargs) # {'a': 1, 'b': 2}
func(1, 2, 3, 4, a=1, b=2, e=3)
"""
# 星號的使用
* 和 **如果在函式的定義處使用
* 把多餘的普通實參打包成元組
** 把多餘的關鍵字實參打包成字典
* 和 **如果在函式的呼叫處使用
* 把元組或者列表進行解包
** 把字典進行解包
"""
def func(a, b, *, c, d):
print(a, b)
print(c, d)
tup = (1, 2)
# 函式的呼叫處 *號用法
func(*tup, c=3, d=4)
# 函式的呼叫處**號用法
dic = {"c": 3, "d": 4}
# func = (1,2,**dic)
# 綜合寫法
# 函式的呼叫處
tup = (1, 2)
dic = {"c": 3, "d": 4}
func(*tup, **dic)
# 定義成如下形式,可以收集所有的實參
def func(*args, **kwargs):
pass
"""
總結:當所有的形參都放在一起,順序原則:
普通形參 -> 預設形參 ->普通收集形參 -> 命名關鍵字形參 -> 關鍵字收集形參
"""
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) # a= 1 b= 2 c= 0 args= () kw= {}
f1(1, 2, c=3) # a= 1 b= 2 c= 3 args= () kw= {}
f1(1, 2, 3) # a= 1 b= 2 c= 3 args= () kw= {}
f1(1, 2, 3, "a", "b", x=99) # a= 1 b= 2 c= 3 args= ('a', 'b') kw= {'x': 99}
f2(1, 2, d=99, ext=None) # a= 1 b= 2 c= 0 d=99 kw= {'ext': None}
# (二)
args = (1, 2, 3, 4)
kw = {"d": 1, "b1": 3}
f1(*args, **kw) # a= 1 b= 2 c= 3 args= (4,) kw= {'d': 1, 'b1': 3}
# (三)
args = (1, 2, 3)
kw = {"d": 88, "x": "#"}
f2(*args, **kw)