1. 程式人生 > 實用技巧 >09 - 函式(中)

09 - 函式(中)

1. 函式的返回值

  • 返回值就是函式執⾏以後返回的結果
  • 通過return來指定函式的返回值
  • return後⾯可以跟任意物件,返回值甚⾄可以是⼀個函式

在這裡插入圖片描述

  • 當你不寫return語句和只有一個return時,返回值是None在這裡插入圖片描述
  • 在函式中return後面的程式碼不再執行
  • break 和continue一定只能在迴圈中使用,只會對當次迴圈起效果
    在這裡插入圖片描述

2. 文件字串

  • help()是Python中內建函式,通過help()函式可以查詢Python中函式的⽤法
  • 在定義函式時,可以在函式內部編寫⽂檔字串,⽂檔字串就是對函式的說明
    在這裡插入圖片描述

3. 函式的作用域

  • 作⽤域(scope)
  • 作⽤域指的是變數⽣效的區域
  • 變數在函式內部的話,不能拿到函式外部使用在這裡插入圖片描述
  • 在Python中⼀共有兩種作⽤域
    • 全域性作⽤域
    • 全域性作⽤域在程式執⾏時建立,在程式執⾏結束時銷燬 (python垃圾回收機制:引用計數的功能,當計數為0的時候,就會銷燬變數)
    • 所有函式以外的區域都是全域性作⽤域 (相對的,函式巢狀)
    • 在全域性作⽤域中定義的變數,都是全域性變數,全域性變數可以在程式的任意位置進⾏訪問
    • 函式作⽤域 函式作⽤域在函式調⽤時建立,在調⽤結束時銷燬
    • 函式每調⽤⼀次就會產⽣⼀個新的函式作⽤域
    • 在函式作⽤域中定義的變數,都是區域性變數,它只能在函式內部被訪問
  • global 宣告變數是全域性變數在這裡插入圖片描述

4. 名稱空間

  • 名稱空間實際上就是⼀個字典,是⼀個專⻔⽤來儲存變數的字典
  • locals()⽤來獲取當前作⽤域的名稱空間
  • 如果在全域性作⽤域中調⽤locals()則獲取全域性名稱空間,如果在函式作⽤域中調⽤locals()則獲取函式名稱空間
  • 返回值是⼀個字典

在這裡插入圖片描述
在這裡插入圖片描述

5. 遞迴函式

  • 遞迴是解決問題的⼀種⽅式,它的整體思想,是將⼀個⼤問題分解為⼀個個的⼩問題,直到問題⽆法分解時,在去解決問題
  • 遞迴式函式有2個條件
    • 1.基線條件 問題可以被分解為最⼩問題,當滿⾜基線條件時,遞迴就不執⾏了
    • 2.遞迴條件 可以將問題繼續分解的條件

在這裡插入圖片描述

  • 遞迴函式練習
    1.定義一個函式,為任意數字做任意的冪運算在這裡插入圖片描述
    2.定義一個函式,用來檢查任意的一個字串是不是一個迴文字串,如果是返回True,不是返回False在這裡插入圖片描述

練習

  • 漢諾塔遊戲,現在有ABC三根柱⼦。要求:將A柱所有的圓盤放到C柱。 在移動的過程中可以藉助B柱。並且規定⼤圓盤不能放⼩圓盤上⾯,每次只能移動⼀個盤⼦。⽤遞迴的⽅式來解決漢諾塔問題。在這裡插入圖片描述
  • 用函式實現一個判斷使用者輸入的年份是否潤年的程式
    • 1.能被400整除的年份
    • 2.能被4整除,但不能被100整除的年份
    • 以上2種方法滿足一種即為閏年。在這裡插入圖片描述
  • 猴子吃桃問題(遞迴):
    猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都多吃了前一天剩下的一半零一個。到第十天早上還想再吃時,見到只剩下一個桃子,求第一天共摘了多少桃子?
    在這裡插入圖片描述