Day9 函數(shù)

函數(shù)

  1. 什么是函數(shù)

    函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼段的封裝

  2. 函數(shù)的分類

    系統(tǒng)函數(shù):系統(tǒng)已經(jīng)封裝好,直接調(diào)用使用

    自定義函數(shù):需要自己去定義

  3. 函數(shù)的定義/聲明

    • 語法:

      def 函數(shù)名(參數(shù)列表):

      ? 函數(shù)體

    • 說明:

      def - python中聲明函數(shù)的關(guān)鍵字
      函數(shù)名 - 標(biāo)識(shí)符,不能是關(guān)鍵字
      ? PEP8命名規(guī)范,見名知意
      () - 固定格式
      參數(shù)列表 - 參數(shù)1,參數(shù)2,參數(shù)3...;這兒的參數(shù)叫形參
      ? 定義的時(shí)候形參就是變量
      ? 功能是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里
      : - 固定格式
      函數(shù)體 - 一個(gè)完整的函數(shù)體包含:函數(shù)說明文檔,實(shí)現(xiàn)功能的代碼段

    • 初學(xué)者聲明函數(shù)的步驟(老司機(jī)繞行)
      第一步:確定函數(shù)功能
      第二步:根據(jù)函數(shù)功能確定函數(shù)名
      第三步:確定形參(是否需要參數(shù),確定需要幾個(gè)參數(shù))
      看實(shí)現(xiàn)函數(shù)的功能需不需要從外邊傳值,以及需要傳幾個(gè)
      第四步:實(shí)現(xiàn)函數(shù)功能
      第五步:確定函數(shù)返回值

      注意:聲明函數(shù)的時(shí)候不會(huì)執(zhí)行函數(shù)體!只有在調(diào)用的時(shí)候才會(huì)中

  4. 函數(shù)的調(diào)用

    • 語法

      函數(shù)名(實(shí)參列表)

    • 說明
      函數(shù)名 - 這個(gè)函數(shù)名對(duì)應(yīng)的函數(shù)必須是已經(jīng)聲明過的函數(shù)
      () - 固定寫法
      實(shí)參列表 - 實(shí)參是用來給形參賦值的 - 傳參
      ? 實(shí)參和形參必須一一對(duì)應(yīng)

    • 調(diào)用過程(重點(diǎn))
      第一步:回到函數(shù)聲明的位置
      第二步:實(shí)參賦值給形參(傳參)
      第三步:執(zhí)行函數(shù)體
      第四步:確定并返回返回值
      第五步:回到函數(shù)調(diào)用的位置,接著執(zhí)行后面的代碼

      # 練習(xí) 聲明一個(gè)函數(shù),獲取并打印一個(gè)列表中指定元素對(duì)應(yīng)的下標(biāo)
      list1 = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4]
      
      
      def inquire_index(list1: list, num1):
          for index in range(len(list1)):
              if list1[index] == num1:
                  print(index)
      
      
      inquire_index(list1, 2)
      # 打印N的階乘
      
      
      def factorial_n(num):
          rpp = 1
          for i in range(1,num+1):
              rpp *= i
          print(rpp)
      
      
      factorial_n(10)
      

函數(shù)中的參數(shù)

  1. 位置參數(shù)和關(guān)鍵字參數(shù)(根據(jù)實(shí)參的傳遞方式對(duì)參數(shù)進(jìn)行的分類)
    • 位置參數(shù):實(shí)參的位置和形參的位置保持一致,按形參聲明的先后順序一一賦值
    • 關(guān)鍵字參數(shù):調(diào)用函數(shù)的時(shí)候以 形參 = 實(shí)參的方式來傳參,這時(shí)候?qū)崊⒌捻樞驘o所謂
def func1(a, b, c):
    print(a, b, c)


# 通過位置參數(shù)給形參賦值
func1(10,20,30)
# 通過關(guān)鍵字參數(shù)傳參
func1(c=30, a=10, b=20)
# 通過位置參數(shù)和關(guān)鍵字參數(shù)結(jié)合傳參(注意:位置參數(shù)在前面,關(guān)鍵字參數(shù)在后面)
func1(10, 20, c=30) 
  1. 參數(shù)默認(rèn)值
    聲明函數(shù)的時(shí)候,可以給參數(shù)賦默認(rèn)值。如果一個(gè)形參有默認(rèn)值,那么調(diào)用函數(shù)的時(shí)候,這個(gè)參數(shù)就可以不用傳參了
    如果有的形參有默認(rèn)值,有的形參沒有默認(rèn)值,那么有默認(rèn)值的形參要放在沒有默認(rèn)值形參的后面。調(diào)用參數(shù)要保證每個(gè)參數(shù)都有值

    # 參數(shù)c有默認(rèn)值是,調(diào)用函數(shù)可以不用傳參
    
    
    def func3(width=5, color='black', long=10):
        print('畫一條長度是%d寬度是%d的%s線' % (long, width, color))
    
    
    func3()
    func3(color='red')
    
  2. 參數(shù)的類型說明 -- 類型說明只有提示的功能沒有約束功能

    • 給參數(shù)設(shè)置默認(rèn)值,默認(rèn)值的類型就是參數(shù)的類型

    • 形參:類型名 在形參后面加:類型名(list,dict,tuple,set)。這種方式必須傳參

    • 函數(shù)聲明的()后面加 -> 類型名,來說明返回值的類型

    • 類型說明的好處: a.對(duì)實(shí)參的類型進(jìn)行說明指導(dǎo)
      ? b.實(shí)現(xiàn)函數(shù)功能的時(shí)候有類型相關(guān)的語法提示

      def list_item(list1, index=0) -> int:
          print(list1[index])
          return 10
      
      
      list_item([1,2,3])
      
      
      def func4(a: list, b: dict):
          a.append()
      
  3. 不定長參數(shù) -- 函數(shù)參數(shù)個(gè)數(shù)不確定

    • 聲明函數(shù)的時(shí)候在形參名前加,可以用來同時(shí)獲取多個(gè)實(shí)參的值 -- 實(shí)質(zhì)是將帶的參數(shù)變成元組,將多個(gè)實(shí)參的值作為元組的元素

      注意:a.如果函數(shù)中既有不定長參數(shù),又有普通參數(shù),那么不定長參數(shù)必須放在普通參數(shù)的后面
      ? b.兩個(gè)的參數(shù)要放在一個(gè)的后面

      # 計(jì)算多個(gè)數(shù)的和
      def num_sum(*nums):
          print(nums)
      
      def func5(name, *scores):
          print(name, scores)
      
      func5('郭銳', 90,20,53)
      
      num_sum(10, 20, 30)
      num_sum(20, 30, 40, 50)
      
    • 在形參前加兩個(gè)* -- 必須用關(guān)鍵字參數(shù),對(duì)應(yīng)的關(guān)鍵字作為key,而值作為value,從而形成一個(gè)字典

      def func6(**nums):
          print(nums)
      
      func6(a=10, b=20)
      func6()
      
      # 寫一個(gè)函數(shù),計(jì)算多個(gè)數(shù)的和(要求可以使用位置參數(shù),也可以使用關(guān)鍵字參數(shù))
      def all_num_sum(*args, **kwargs):
          sum1 = 0
          for item in args:
              sum1 += item
          for key in kwargs:
              sum1 += kwargs[key]
          print('和為%d' % sum1)
      
      
      all_num_sum(10, 20, a=30, b=40)
      

函數(shù)中的返回值

  1. 什么是返回值 - 返回值就是將函數(shù)里面的數(shù)據(jù)傳遞到函數(shù)外面

    • 就是函數(shù)調(diào)用表達(dá)式的值,就是return 關(guān)鍵字后面的表達(dá)式的值

    • python中每個(gè)函數(shù)都有返回值,默認(rèn)為None
      ? 函數(shù)調(diào)用表達(dá)式 - 調(diào)用函數(shù)的語句
      return - 關(guān)鍵字,只能寫在函數(shù)體中。 功能:1:確定函數(shù)的返回值 2.結(jié)束函數(shù)
      ? 執(zhí)行函數(shù)的時(shí)候,如果遇到return,函數(shù)直接結(jié)束,并且將return后面的值作為返回值
      回到函數(shù)調(diào)用的位置(這個(gè)時(shí)候函數(shù)對(duì)奧用的表達(dá)式的值就是函數(shù)的返回值)

      函數(shù)調(diào)用過程
      回到函數(shù)聲明位置
      傳參 - (保證每個(gè)參數(shù)都有值)
      執(zhí)行函數(shù)體
      執(zhí)行完函數(shù)確定返回值 -- 如果執(zhí)行過程中沒有遇到return,函數(shù)的返回值為None
      ? 遇到return,return后面是什么,返回值就是什么

    def func1():
        print('*******')
        return 0
        print('=======')
    
    
    result = func1()        #func1()就是函數(shù)調(diào)用表達(dá)式
    print(result)
    
    
    def func2():
        print(100)
    
    
    print(func2())          # 先打印100,然后打印None ,先執(zhí)行函數(shù),再打印返回值
    
  2. 多個(gè)返回值
    return 值1,值2,值3 <==> (值1,值2,值3.···)

    def func3():
        return 1,2,3
    
    
    x,y,z = func3()
    print(x,y,z)
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,014評(píng)論 2 16
  • 一、函數(shù)、字典、列表集合的區(qū)別 列表,字典,元祖,集合"""列表(list): [];可變,有序;元素是任何類型的...
    大漠判官1閱讀 304評(píng)論 0 0
  • 一、變量的作用域 1、變量的作用域 變量在程序中能夠使用的范圍 2、全局變量 a.聲明在函數(shù)或者類的外部的變量都是...
    w的狗子啊閱讀 424評(píng)論 0 0
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,207評(píng)論 0 9
  • 2018年6月6日 星期三 媽媽,為什么同學(xué)都在玩抖音,我卻不可以,這樣很沒面子! 孩子: 真正的自由, 不是身...
    晴婕栩閱讀 285評(píng)論 0 0

友情鏈接更多精彩內(nèi)容