python 函數

初始函數

為什麼要用函數?

  • 避免程式碼重用
  • 提高程式碼的可讀性

函數的定義與調用?

def 函數名(參數1,參數2):
    '''函數注釋'''
    print("函數體")
    return 返回值

定義:def 關鍵字開頭,空格之後接函數名和圓括弧,最後還要加上一個冒號。

​ def是固定的,不能改變。

函數名:函數名命名規則是包含字母、數字、下劃線的任意組合,但是不能以數字開頭,雖然函數名和隨便取名,但是一般盡量定義為可以表達函數功能的名字。

函數的調用

​ 返回值=函數名(參數1,參數2)#記得函數名後面加括弧

示例
定義一個求計算字元串長度的函數,假如我們的len()函數現在不能用了,name我們就需要定義一個函數,求字元串的長度。如果讓我們一次一次的去寫相同的程式碼,會非常麻煩,所以我們需要使用函數。
def length():
    s = "hello world"
    length = 0
    for i in s:
        length+=1
    print(length)
print(length())

return 必須放在函數里,當函數有返回值的時候,必須用變數接收才有效果。
def length():
    s = "hello world"
    length = 0
    for i in s:
        length += 1
	return length
hprint(length())

函數的返回值

  • return的作用:結束一個函數的執行

  • 首先返回值可以是任意的數據類型

  • 函數可以有返回值:如果有返回值,必須要有變數接收才有效果

  • 函數也可以沒有返回值

  • 沒有返回值的時候分為三種情況

    • 當不寫return的時候,函數的返回值為None
    • 當只寫一個return的時候,函數的返回值為None
    • return None的時候,函數的返回值為None
  • return返回一個值(一個變數)

  • return返回多個值(多個變數)多個值之間用逗號隔開,以元組的形式返回。接收:可以用一個變數接收,也惡意用多個變數接收,返回幾個值就用幾個變數接收

  •   def func():
          a = 111
          b = [1,2,3]
          c = {"a":15,"b":6}
          #return a 返回一個值
          #return a,b,c 返回多個值,變數之間按逗號隔開,以元組的形式返回
      print(func())
    
#不寫return時返回None
def func():
    a = 111
    b = [1,2,3]
ret = func()
print(ret)
#自卸一個return時,返回None
def func():
    a = 111
    b = [1,2,3]
    return 
ret = func()
print(ret)
#return None的時候返回None
def func():
    a = 111
    b = [1,2,3]
    return None
ret = func()
print(ret)

return 的作用

def func():
    print("開始")
    return  #結束一個函數的執行
	print("結束")
func()

定義一個列表,返回列表最後一個值

#方法一
def func():
    list = [1,3,4,5]
    return list[-1]
#方法二
def func():
    list = [1,3,4,5]
    return list
a,b,c,d = func()
print(d)

函數的參數

def func(c):
    '''
    參數接受形式參數,簡稱形參
    '''

實參和形參

  • 形參:是函數定義時候的參數
  • 實參:函數調用時候傳進來的參數

如何傳遞多個參數

  • 可以傳遞多個參數,多個參數之間用逗號隔開。
  • 站在傳參的角度上,調用函數時傳參數有兩種方式
    • 按照位置傳參數
    • 按照關鍵字傳參數
  • 用法:
    • 位置參數必須在關鍵字參數的前面
    • 對於一個參數只能賦值一次
def func(a,b):
    if a > b:
        return a
    else:
        return b
print(func(1,3))#按照位置傳參
print(func(a=1,b=3))#按照關鍵字傳參
print(func(1,b=3))#按照位置傳參和關鍵字傳參混搭
       

默認參數

用法:

  • 為什麼要用默認參數?
    • 將變化比較小的值設置為默認參數
  • 定義:
    • 默認參數可以不傳,不傳的時候用的是默認值,如果傳會覆蓋默認值。
    • 默認的值是定義函數的時候已經確定了的。
def func(a,b=1):
    print(a,b)
func(0)
dunc(0,2)

默認參數缺陷:默認參數是一個可變的數據類型

def func(a,l=[]):
    l.append(a)
    print(l)
    
func(1)
func(2)

#輸出[1]    [1,2]

動態參數

按位置傳參多餘的參數都是有*args統一接收,保存成一個元組的形式。

按關鍵字傳參多餘的參數都是由**kwargs接收,保存成一個字典的形式。

def func(a,b,*args):
    sum = a+b
    for i in args:
        sum += i
    return sum

print(func(1,2,3,4))#輸出他們的和
def func(a,b,**kwargs):
    print(a,b,**Kwargs)
    
func(a=10,b=20,c=30,d=40)#輸出10,20 {"c":30,"d":40}

總結

  • 定義:def 關鍵字揩油,空格之後是函數名稱和圓括弧()和:
  • 參數:圓括弧用來接收參數,若傳入多個參數,參數之間用逗號分隔。
  • 參數可以定義多個,也可以不定義。
  • 參數有很多種,如果涉及到多種參數的定義,應始終遵循位置參數、*args、默認參數、*kwargs.
  • 注釋:函數第一行語句應該添加功能注釋
  • 函數體:函數內容以冒號起始,並且縮進。
  • 返回值:return [表達式]結束函數,不帶表達式的return相當於返回None。
def 函數名(參數1,參數2,*args,**kwargs):
	'''注釋內容'''
    函數體
    return 返回值