核心語法 · 10 道範例題

Python 函式練習題與答案

函式不只是有名字的程式碼區塊。它是一條邊界:值進去,結果出來,局部名字不應該洩漏。這些題目檢查的就是這條邊界。

35 道題在完整題庫中 · 13 道選擇 · 13 道填空 · 9 道輸出

這個主題考什麼

  • 區分列印一個值和回傳一個值。
  • 追蹤參數、預設值以及局部與全局名字。
  • 用 lambda 寫短回呼,同時不隱藏主要邏輯。

常見錯誤

  • 呼叫方需要回傳值時,函式裡卻只用了 print。
  • 使用 [] 這樣的可變預設值,結果發現它跨呼叫保留。
  • 忘記沒有 return 的函式會回傳 None。
範例題

範例題

10

從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。

  1. 選擇題q0644

    1. 小明寫了個列印選單的函式,裡面沒有 return 語句。呼叫後回傳什麼?

    1. 報錯
    2. 0
    3. None
    4. 空字串
    顯示答案

    答案

    C. None

    解析: 沒有 return 的函式仍然會回傳值,這個值就是 None。它與列印不同:呼叫得到 None,而 print 早已把文字送到螢幕。

  2. 選擇題q0651

    2. 🧋 小明寫了個列印選單的函式,def f(): pass 的回傳值?

    1. None
    2. 0
    3. 報錯
    4. 空字串
    顯示答案

    答案

    A. None

    解析: pass 什麼也不做,沒有 return 語句,呼叫結果仍是 None。只靠副作用起作用的函式總是回傳 None。

  3. 選擇題q0655

    3. 🧋 小明在函式裡修改全局的奶茶總數,以下程式碼輸出什麼? count=0 def f(): global count count+=1 f() print(count)

    1. 0
    2. 1
    3. 報錯
    4. None
    顯示答案

    答案

    B. 1

    解析: 聲明之後函式體能重新綁定模組級的 count,count += 1 把外層的 0 改成 1。沒有 global 這一行會拋 UnboundLocalError。

  4. 選擇題q0665

    4. 函式沒有寫 return,呼叫結果是什麼?

    1. 0
    2. 空字串
    3. None
    4. False
    顯示答案

    答案

    C. None

    解析: 沒有 return 或者只寫空 return 的函式,隱式結果都是 None。它不是 0,也不是空字串。

  5. 填空題q0646

    5. 小明函式內定義的臨時變數(如一杯奶茶的配料),稱為 ___ 變數

    顯示答案

    答案

    局部

    解析: 函式內部賦值的名字存在於那次呼叫的局部命名空間,呼叫回傳後消失;檔案其他地方看不到它,也不會互相汙染,呼叫堆疊一退就沒了。

  6. 填空題q0659

    6. 🧋 小明函式內的臨時變數,函式內部定義的變數稱為 ___ 變數

    顯示答案

    答案

    局部

    解析: 局部變數只能在建立它的函式內存取;所以不同函式可以放心復用 total 這類常見名字而不會衝突,作用域互不幹擾。

  7. 填空題q0670

    7. 接收任意數量位置參數,橫線填什麼?

    def total(*____):
        return sum(prices)
    顯示答案

    答案

    prices

    解析: 星號把所有多出來的位置參數收進元組 prices;sum() 再求和,參數名前的 * 就是全部語法,名字可以隨意取。

  8. 輸出預測q0645

    8. 函式套函式呼叫,輸出什麼?

    def f(x):
        return x * 2
    print(f(f(3)))
    顯示答案

    答案

    12

    解析: 內層 f(3) 先執行得到 6,外層再把它翻倍成 12;參數總在所屬呼叫之前求值,巢狀呼叫永遠從裡往外。

  9. 輸出預測q0661

    9. 函式帶預設參數,兩次呼叫分別回傳什麼?

    def add_one(x=2):
        return x + 1
    print(add_one(), add_one(5))
    顯示答案

    答案

    3 6

    解析: add_one() 使用預設值 2 得到 3,add_one(5) 覆蓋預設值得到 6。預設值只在省略實參時生效。

  10. 輸出預測q0664

    10. 閉包儲存外層變數,outer(2)(3) 輸出多少?

    def outer(x):
        def inner(y):
            return x + y
        return inner
    print(outer(2)(3))
    顯示答案

    答案

    5

    解析: outer(2) 回傳閉包 inner,它記住了 x=2,再用 3 呼叫得到 5。outer 回傳後 x 仍被閉包保留。

常見問題

print 和 return 有什麼區別?

print 把文字寫到控制臺;return 把值交回呼叫方,讓其他表達式繼續使用。

為什麼可變預設參數有風險?

預設物件在函式定義時只建立一次,修改會跨呼叫保留。可以用 None 作為預設值,在函式內部再建立新物件。

繼續保持練習節奏。

完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。

開啟完整練習