這個主題考什麼
- 區分列印一個值和回傳一個值。
- 追蹤參數、預設值以及局部與全局名字。
- 用 lambda 寫短回呼,同時不隱藏主要邏輯。
常見錯誤
- 呼叫方需要回傳值時,函式裡卻只用了 print。
- 使用 [] 這樣的可變預設值,結果發現它跨呼叫保留。
- 忘記沒有 return 的函式會回傳 None。
範例題
從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。
-
1. 小明寫了個列印選單的函式,裡面沒有 return 語句。呼叫後回傳什麼?
顯示答案
答案
C. None解析: 沒有 return 的函式仍然會回傳值,這個值就是 None。它與列印不同:呼叫得到 None,而 print 早已把文字送到螢幕。
-
2. 🧋 小明寫了個列印選單的函式,def f(): pass 的回傳值?
顯示答案
答案
A. None解析: pass 什麼也不做,沒有 return 語句,呼叫結果仍是 None。只靠副作用起作用的函式總是回傳 None。
-
3. 🧋 小明在函式裡修改全局的奶茶總數,以下程式碼輸出什麼? count=0 def f(): global count count+=1 f() print(count)
顯示答案
答案
B. 1解析: 聲明之後函式體能重新綁定模組級的 count,count += 1 把外層的 0 改成 1。沒有 global 這一行會拋 UnboundLocalError。
-
4. 函式沒有寫 return,呼叫結果是什麼?
顯示答案
答案
C. None解析: 沒有 return 或者只寫空 return 的函式,隱式結果都是 None。它不是 0,也不是空字串。
-
5. 小明函式內定義的臨時變數(如一杯奶茶的配料),稱為 ___ 變數
顯示答案
答案
局部解析: 函式內部賦值的名字存在於那次呼叫的局部命名空間,呼叫回傳後消失;檔案其他地方看不到它,也不會互相汙染,呼叫堆疊一退就沒了。
-
6. 🧋 小明函式內的臨時變數,函式內部定義的變數稱為 ___ 變數
顯示答案
答案
局部解析: 局部變數只能在建立它的函式內存取;所以不同函式可以放心復用 total 這類常見名字而不會衝突,作用域互不幹擾。
-
7. 接收任意數量位置參數,橫線填什麼?
def total(*____): return sum(prices)顯示答案
答案
prices解析: 星號把所有多出來的位置參數收進元組 prices;sum() 再求和,參數名前的 * 就是全部語法,名字可以隨意取。
-
8. 函式套函式呼叫,輸出什麼?
def f(x): return x * 2 print(f(f(3)))顯示答案
答案
12解析: 內層 f(3) 先執行得到 6,外層再把它翻倍成 12;參數總在所屬呼叫之前求值,巢狀呼叫永遠從裡往外。
-
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. 閉包儲存外層變數,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 作為預設值,在函式內部再建立新物件。
繼續保持練習節奏。
完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。