Python基礎(chǔ)知識(shí)12: 函數(shù)的返回值和參數(shù)進(jìn)階

一堪侯、內(nèi)容總覽

  • 1.1埃碱、函數(shù)參數(shù)和函數(shù)返回值的作用
  • 1.2猖辫、函數(shù)的返回值進(jìn)階
  • 1.3酥泞、函數(shù)的參數(shù)進(jìn)階
  • 1.4砚殿、遞歸函數(shù)

二、函數(shù)參數(shù)和函數(shù)返回值的作用

  • 2.1芝囤、函數(shù)根據(jù)有沒(méi)有參數(shù)以及有沒(méi)有返回值似炎,相互組合之后有以下四種情況

    無(wú)參數(shù) 無(wú)返回值
    無(wú)參數(shù) 有返回值
    有參數(shù) 無(wú)返回值
    有參數(shù) 有返回值
    

    定義一個(gè)函數(shù)是否要返回值,以及是否要傳參數(shù)悯姊,要根據(jù)自己的需求而定

  • 2.2羡藐、函數(shù)的返回值進(jìn)階~利用元組返回多個(gè)值

    我們?cè)陂_(kāi)發(fā)的過(guò)后中,在調(diào)用一個(gè)函數(shù)后悯许,我們希望函數(shù)返回多個(gè)值仆嗦,這時(shí)候我們就可以利用元祖了,元組可以包含多個(gè)不同類型的值先壕,如下瘩扼,查詢一個(gè)人的信息,返回他的身高和年齡(提示:你可以利用字典包含多個(gè)值返回)

    def people_info():
    
       name = "小王"
       age = 26
       # 如果函數(shù)返回的類型是元組垃僚,小括號(hào)可以省略
       return name,age  或者 return (name,age)
    result = people_info()
    print("名字=%s 年齡=%d" % (result[0],result[1]))
    

    返回元組取值的優(yōu)化:用多個(gè)變量去接受返回元組的值集绰,要求:變量的個(gè)數(shù)要與函數(shù)返回元組的個(gè)數(shù)一致,優(yōu)點(diǎn)是:不用在使用索引取值

    def people_info():
    
       name = "小王"
       age = 26
       # 如果函數(shù)返回的類型是元組谆棺,小括號(hào)可以省略
       return name,age  或者 return (name,age)
    name,age = people_info()
    print("名字=%s 年齡=%d" % (name, age))
    

    延伸:交換兩個(gè)變量的值栽燕,如:a = 2 b = 3 ,交換其值

    解法1:使用中間變量
    c = a 
    a = b
    b = c
    
    解法二:不使用中間變量
    a = a + b
    b = a - b
    a = a - b
    
    解法三:python專有,利用元祖賦值交換
    a,b = (b,a)
    

三、函數(shù)的參數(shù)-進(jìn)階(不可變和可變的參數(shù)):函數(shù)內(nèi)部賦值不會(huì)影響到外部的實(shí)參碍岔,通過(guò)方法修改其值會(huì)改變外部實(shí)參

  • 3.1浴讯、針對(duì)函數(shù)內(nèi)部的參數(shù)進(jìn)行賦值,是不會(huì)影響到函數(shù)調(diào)用時(shí)傳遞的實(shí)參變量蔼啦,如下

    def test(num):
        # num 在這里相當(dāng)于一個(gè)局部變量兰珍,剛開(kāi)始與外面的gl_num指向的是同一個(gè) 數(shù)據(jù)內(nèi)存地址,
        # 在函數(shù)內(nèi)被重新賦值為 20询吴,又指向了數(shù)據(jù) 20 的內(nèi)存地址掠河,
        # 而原來(lái)的 gl_num 還是指向 10的內(nèi)存地址
        num = 20
        print(num)
    gl_num = 10
    test(gl_num)
    print(gl_num)
    
  • 3.2、在函數(shù)內(nèi)部使用方法修改可變參數(shù)會(huì)影響外部實(shí)參猛计,如下

    def test(num_list):
    
         num_list.append(5)
         print(num_list)
    
    gl_num_list = [1,2,3,4]
    test(gl_num_list)
    print(gl_num_list)
    打印結(jié)果是:
    [1,2,3,4,5]
    [1,2,3,4,5]
    

    拓展: 可變類型的 +=,num_list += num_list 本質(zhì)上是調(diào)用列表的:num_list.extend(num_list)唠摹,如下面的列表

    def test(num_list):
    
        num_list += num_list 
        print(num_list)
    gl_num_list = [1,2,3]
    test(gl_num_list)
    print(gl_num_list)
    打印結(jié)果是:
    [1,2,3,1,2,3]
    [1,2,3,1,2,3]
    
  • 3.3、列表的排序方法明確缺省參數(shù)的概念及作用( 提示:缺省參數(shù)也就是形參默認(rèn)有值的)

    • 定義函數(shù)時(shí)奉瘤,可以給 某個(gè)參數(shù) 指定一個(gè) 默認(rèn)值勾拉,具有默認(rèn)值的參數(shù)就叫做 缺省參數(shù)
    • 調(diào)用函數(shù)時(shí),如果沒(méi)有傳入 缺省參數(shù) 的值盗温,則在函數(shù)內(nèi)部使用定義函數(shù)時(shí)指定的參數(shù)默認(rèn)值
    • 函數(shù)的缺省參數(shù)藕赞,將常見(jiàn)的值設(shè)置為參數(shù)的缺省值,從而 簡(jiǎn)化函數(shù)的調(diào)用

    如下:列表的升序與降序 ~ 傳參

    gl_number_list = [3,1,5]
    
    # 默認(rèn)就是升序排序卖局,因?yàn)檫@種應(yīng)用需求更多
    gl_number_list.sort()
    print(gl_number_list)
    
    # 只有當(dāng)需要排序的時(shí)候斧蜕,才需要傳遞  reverse  參數(shù)
    gl_number_list.sort(reverse=True)
    print(gl_number_list)
    
    • 指定參數(shù)為缺省參數(shù),直接在參數(shù)名后面加上 = 值 就好了砚偶,如下

      def test(name,gender=True):
      
            gender_test = "男"
            if not gender:
                 gender_test = "女"
            print("%s 是 %s"% (name, gender_test))
      
      test("李四",True)
      打印結(jié)果:
      李四 是 男
      

      缺省參數(shù)批销,需要使用 最常見(jiàn)的值 作為默認(rèn)值!如果一個(gè)參數(shù)的值不能確定染坯,則不應(yīng)該設(shè)置默認(rèn)值均芽,具體的數(shù)值在調(diào)用函數(shù)時(shí),由外界傳遞单鹿!

      • 缺省參數(shù) 注意事項(xiàng)

        • (1)掀宋、缺省參數(shù)的定義位置:必須保證 帶有默認(rèn)值的缺省參數(shù) 在參數(shù)列表的末尾,下面的例子

          # 錯(cuò)誤的
          def test(name,age="18",height):
          # 正確的
          def test(name,height,age="18"):
          
        • (2)仲锄、調(diào)用帶有多個(gè)缺省參數(shù)的函數(shù)
          在 調(diào)用函數(shù)的時(shí)候劲妙,如果有 多個(gè)缺省參數(shù),需要指定參數(shù)名昼窗,這樣解釋器才能夠知道參數(shù)的對(duì)應(yīng)關(guān)系是趴!,如下:只給height賦值

          def test(name,age="1",height=""):
          
              print("名字=%s 年齡=%s 身高=%s"%(name, age, height))
          test("老王",height="178"):
          
  • 3.4、多值參數(shù)

    • 有時(shí)候可能需要 一個(gè)函數(shù) 能夠處理的參數(shù) 個(gè)數(shù) 是不確定的澄惊,這個(gè)時(shí)候唆途,就可以使用 多值參數(shù)

    • python 中有 兩種 多值參數(shù):

       參數(shù)名前增加一個(gè) * 可以接收 元組
       參數(shù)名前增加兩個(gè) * 可以接收 字典
      
    • 一般在給多值參數(shù)命名時(shí)富雅,習(xí)慣使用下面的兩個(gè)名字

      • *args(arguments的縮寫(xiě),有變量的含義) 肛搬,存放元組没佑,參數(shù)前有一個(gè) *

      • **kwargs(kw是單詞keywords的縮寫(xiě)),存放 字典 參數(shù)温赔,前面有兩個(gè) *

      • 看下面的例子:

        def test(name,*args,**kwargs):
        
               print(name)
               print(args)
               print(kwargs)
        
        test3("小李",1, 2,3,A="1",B="2")
        
  • 3.5蛤奢、元組 和 字典 的拆包(拆包語(yǔ)法:簡(jiǎn)化了元組變量和字典變量的傳遞)

    • 在調(diào)用帶有多值參數(shù)的函數(shù)時(shí),如果希望:

      • 將一個(gè)元組變量陶贼,直接傳遞給 args,在傳值的實(shí)參前面加上 一個(gè) *
      • 將一個(gè)字典變量啤贩,直接傳遞給 kwargs,在傳值的實(shí)參前面加上 兩個(gè) *
    • 如下

      def test(*args,**kwargs):
            print(args)
            print(kwargs)
      
      tuple1 = (1,2,3)
      dict1 = {"name":"小王","age":18}
      test(*tuple1,** dict1)
      打印結(jié)果是:
      (1, 2, 3)
      {'name': '小王', 'age': 18}
      

四、函數(shù)的遞歸(函數(shù)調(diào)用自身的編程技巧就叫做 遞歸)拜秧,在處理不確定的循環(huán)條件時(shí)痹屹,比較有用,例如:遍歷整個(gè)文件的目錄

  • 4.1枉氮、遞歸函數(shù)的特點(diǎn)

    • 一個(gè)函數(shù)內(nèi)部調(diào)用自己:函數(shù)內(nèi)部既可以其他函數(shù)志衍,也可以調(diào)用自己

    • 代碼特點(diǎn):(1)、函數(shù)內(nèi)部的代碼是相同的聊替,只是針對(duì)參數(shù)不同楼肪,處理的結(jié)果不同,(2)、當(dāng)參數(shù)滿足一個(gè)條件時(shí)惹悄,函數(shù)不再執(zhí)行(這個(gè)通常被稱為遞歸的出口春叫,很重要,如果沒(méi)有會(huì)出現(xiàn) 死循環(huán)

      def  test(num):
      
         if num == 1:
             return 
         test(num-1)
         print(num)
      
      test(5)
      打印結(jié)果是:
      4
      3
      2
      1
      5
      

      從上面的打印結(jié)果我們可以看出俘侠,當(dāng)外面的 test(5) 調(diào)用的時(shí)候象缀,print(num) 函數(shù)是不會(huì)執(zhí)行的,等其他調(diào)用都結(jié)束了才會(huì)執(zhí)行

  • 4.2爷速、遞歸函數(shù)的例子:累加求和求 1到100的和,用遞歸如下

def sum_number(num):

     # 1霞怀、出口
     if num == 1:
          return 1
     # 2惫东、數(shù)字累加 num + (1+2+...num-1)
     temp = sum_number(num-1)
     # 3、兩個(gè)數(shù)字相加的和
     return num + temp

result = sum_number(100)
print(result)
  • 4.3毙石、下面是一個(gè)計(jì)算遞歸求和的圖示


    計(jì)算遞歸求和的圖示
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末廉沮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子徐矩,更是在濱河造成了極大的恐慌滞时,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤灯,死亡現(xiàn)場(chǎng)離奇詭異坪稽,居然都是意外死亡曼玩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)窒百,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黍判,“玉大人,你說(shuō)我怎么就攤上這事篙梢∏晏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵渤滞,是天一觀的道長(zhǎng)贬墩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妄呕,這世上最難降的妖魔是什么震糖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮趴腋,結(jié)果婚禮上吊说,老公的妹妹穿的比我還像新娘。我一直安慰自己优炬,他們只是感情好颁井,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蠢护,像睡著了一般雅宾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葵硕,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天眉抬,我揣著相機(jī)與錄音,去河邊找鬼懈凹。 笑死蜀变,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的介评。 我是一名探鬼主播库北,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼们陆!你這毒婦竟也來(lái)了寒瓦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坪仇,失蹤者是張志新(化名)和其女友劉穎杂腰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體椅文,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喂很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年惜颇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恤筛。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡官还,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毒坛,到底是詐尸還是另有隱情望伦,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布煎殷,位于F島的核電站屯伞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏豪直。R本人自食惡果不足惜劣摇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弓乙。 院中可真熱鬧末融,春花似錦、人聲如沸暇韧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)懈玻。三九已至巧婶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涂乌,已是汗流浹背艺栈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湾盒,地道東北人湿右。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像历涝,于是被迫代替她去往敵國(guó)和親诅需。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一荧库、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,815評(píng)論 2 16
  • 陰 雨 閑來(lái)無(wú)事 無(wú)心向?qū)W 略讀外語(yǔ) 或無(wú)成效 或。赵刑。分衫。
    隔壁的少年閱讀 105評(píng)論 0 1
  • 一. 秋葉寥寥 伴風(fēng)覽遍天下 秋果碩碩 掛枝頭 咧嘴笑出春夏 晃啊晃 落進(jìn)冬的雪筐 二. 月住梢頭 閑云散步悠悠 ...
    扯云朵作糖吃閱讀 102評(píng)論 0 0
  • 東美糕又名香脯糕,慶春糕般此,其制作始自明崇禎年間蚪战,當(dāng)時(shí)是東美街(位于福建省漳州龍海市角美鎮(zhèn)東美村)“錦成”號(hào)糕餅店獨(dú)...
    重玄閱讀 1,534評(píng)論 4 1
  • 01 早上起床兒子說(shuō)他想吃煎雞蛋牵现,他自己跑去冰箱看了看,問(wèn)雞蛋為什么那么小邀桑,我說(shuō)土雞蛋都是比較小的瞎疼,他問(wèn)自己可以吃...
    雅禪閱讀 1,358評(píng)論 1 4