第七章 函式

柠檬の夏天發表於2024-06-13

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)

相關文章