python 3 基礎之自定義函數


 函數

1、什么是函數

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。

用人話來說就是:需要某塊代碼多次,為了提高編寫的效率以及代碼的重用,把具有獨立功能的代碼段組織為一個小模塊,需要時就可以直接調用,這就是函數

函數能提高應用的模塊性,和代碼的重復利用率

Python 定義函數使用 def 關鍵字,一般格式如下:

def 函數名(參數列表):
    ......    
    函數體
    ......
    return 返回值
  • def:表示函數的關鍵字
  • 函數名:函數的名稱,日后根據函數名調用函數
  • 函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888,2]中的最大數等...
  • 參數:為函數體提供數據
  • 返回值:當函數執行完畢后,可以給調用者返回數據。
  • 其中參數和返回值不是必須的

  參考來自:https://www.cnblogs.com/saneri/p/10055615.html

2、函數的定義和調用

自定義一個函數,求和

# 自定義一個函數求兩個數 之和
def my_func(a,b):
    return a + b
# 調用函數
f = my_func(3,88)
# 打印結果
print(f)

運行結果:91

  • 每次調用函數時,函數會從頭開始執行,當這個函數中的代碼執行完畢,也意味着調用結束
  • 如果函數中執行到了return也會結束函數

3、函數的參數

  3.1、實參和形參

# 自定義一個函數求兩個數 之和
def my_func(a,b):
    return a + b
# 調用函數
f = my_func(3,88)

  其中,上面代碼,定義時小括號中的參數,用來接收參數用的,稱為 “形參”;調用時小括號中的參數,用來傳遞給函數用的,稱為 “實參”(即a/b為形參,3/88為實參)

  3.2、按調用函數時參數的書寫方式 分為:位置參數與關鍵字參數

  位置參數

# 自定義一個函數求兩個數 之和
def my_func(a,b):
    return a + b
# 調用函數時實參只輸入一個
f = my_func(3)

  上面代碼運行時會報錯,因為定義函數時有兩個形參,而調用時只輸入了一個實參

  結論:使用位置參數調用函數 需要注意實參的位置,實參的位置和形參的位置要一一對應,少傳一個實參會報錯

  

  關鍵字參數

# 定義一個函數
def my_print(name, age, no):
    print("我的名字:%s" % name)
    print("我的年齡:%d" % age)
    print("學號:%s" % no)
# 使用關鍵字參數方式調用函數
my_print(age=23,name='洗滌',no=1)

  調用函數的時候使用的是函數的形參名;若關鍵字參數與位置參數混合使用,需要讓位置參數在前 ,關鍵字參數再后,某個參數使用了關鍵字參數,后面的都要使用關鍵字參數

  3.3、默認參數(缺省參數)

  默認參數即定義時給形參設置一個默認值,后面調用的時候這個參數就可以不寫,直接取默認值;也可以后面把一個新的值給到此參數,調用時不給值則默認

# 定義一個有默認參數的函數
def my_print(name, no, age=20):
    print("我的名字:%s" % name)
    print("我的年齡:%d" % age)
    print("學號:%s" % no)
# 調用函數
my_print('小明','007')

  運行結果:

      我的名字:小明
      我的年齡:20
      學號:007

  此時調用函數時可以不寫默認的那個參數,定義有默認參數的時候,需要把默認參數寫在最后

  3.4、可變參數(可以實現函數定義,以及函數調用時,參數個數不匹配的情況)

    待補充..................

4、函數的返回值(return+表達式)

  用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None

  4.1、單個返回值

# 定義一個求和函數
def smqh(a,b):
    re = a + b
    # 有一個返回值
    return re
d = smqh(23,2)
print(d)
# 如果有一個return+數值,稱之為這個函數有返回值

  4.2、多個返回值

def my_func(score):
    if score < 0:
        print("您傳入的分數有誤!!!")
        # 函數的執行提前結束
        return
       #return后面沒有值,什么都不返回,這是性能才考慮到的,因為分數小於0 ,后面的不需要再比較,無意義
    # 對分數進行判斷
    if score >= 90:
        return ""
    elif score >= 80:
        return ""
    elif score >= 60:
        return ""
    elif score >= 0:
        return ""
    # 他不會執行 因為在前面已經執行了return
    print("測試")    

  return的作用:1、作為函數的返回值

          2、執行的函數提前結束(一個函數中可以有多個return語句,只要有一個return語句被執行到,這個函數就會結束了,因此后面的return沒有什么用處)

5、函數的嵌套

# 寫一個函數打印一條橫線
def p_one_d():
    print('-'*20)

# 打印自定義函數的橫線
def p_line(num):
    for i in range(num):
        p_one_d()
# 調用函數
p_line(3)

  運行結果:

      --------------------
      --------------------
      --------------------

  函數p_one_d()嵌套在函數p_line()里面,調用函數p_line()時,p_line()函數多次調用了p_one(),這就是函數的嵌套調用

6、函數的文檔說明

  看文檔說明需要用到python的內置函數help(),用來查看python函數的文檔說明

  若自定義函數沒有文檔說明,使用help時默認會打印函數附近的注釋

  其作用:1、可以在時間過了很久后 快速讀懂自己的代碼;2、便於工作的交接

  格式:help(函數名稱)

def sumhe(num1,num2):
    '''
    這是求和的
    :param num1:數字1
    :param num2: 數字2
    :return: 返回兩個數字相加
    '''
    return num1 + num2
help(sumhe)
================================================== 代碼運行結果: sumhe(num1, num2) 這是求和的 :param num1:數字1 :param num2: 數字2 :
return: 返回兩個數字相加

7、匿名函數

  在傳入函數時,有些時候,不需要顯式地定義函數,直接傳入匿名函數更方便.(匿名函數沒有函數名)
  匿名函數用關鍵字lambda定義
  7.1、定義普通函數和定義lambda函數的方法和區別:
###########普通函數#############
# 定義一個普通求和函數
def suma(a,b):
    return a + b
print(suma(3,4))
###########lambda#############
f = lambda a,b: a+b
ret = f(3,2)
print(ret)

  lambda的意義就是為了簡潔的表達函數

  解釋:lambda a,b : a + b

  冒號左邊的lambda 相當於函數的名字(),a,b就是函數的形參;冒號右邊的內容就是函數的返回值

  匿名函數有個限制,就是只能有一個表達式,不用寫return,返回值就是該表達式的結果

  7.2、把函數當做參數傳遞

def sanf(a,b,c):
    print('a = %d' % a)
    print('b = %d' % b)
    print('result:%d' % c(a,b))#c是一個函數,當做參數來用
f = lambda a,b : a + b
sanf(1, 3, f)

  運行結果:

    a = 1
    b = 3
    result:4

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM