Upgrade to Pro — share decks privately, control downloads, hide ads and more …

為你自己學 Python - 冷知識篇

為你自己學 Python - 冷知識篇

Avatar for 高見龍

高見龍

August 30, 2025
Tweet

More Decks by 高見龍

Other Decks in Programming

Transcript

  1. 五倍學院 自我介紹 高見龍 @ 五倍學院 ๏ 程式開發 ≒ 30 年

    ๏ 教學經驗 ≒ 16 年 ๏ 出版 : ๏「為你自己學 Git」 ๏「為你自己學 Ruby on Rails」 ๏「為你自己學 Python」 ๏ 是個喜歡打魔物獵人而且希望可以寫一 輩子程式的電腦阿宅
  2. 1) Java (1995) 2) JavaScript (1995) 3) Python (1991) 4)

    Ruby (1995) 5) PHP (1995) Q. 以下這幾種程式語言 , 誰最老 ?
  3. Q. 以下程式碼的執行結果為何 ? 1) ["小傑", "雷歐力", "酷拉皮卡"] 2) ["奇犽", "西索",

    "尼飛彼多"] 3) 別騙我了 , 這程式根本不會動 4) 我只想整套獵人卡片 ! def add_card(bk, card): bk.append(card) bk = ["奇犽", " 西 索", "尼 飛 彼多"] book = [" 小 傑", "雷歐 力 "] add_card(book, "酷拉 皮 卡") print(book) # 這會印出什麼?
  4. Q. 以下程式碼的執行結果為何 ? 1) ["小傑", "雷歐力", "酷拉皮卡"] 2) ["奇犽", "西索",

    "尼飛彼多"] 3) 別騙我了 , 這程式根本不會動 4) 我只想整套獵人卡片 ! def add_card(bk, card): bk.append(card) bk = ["奇犽", " 西 索", "尼 飛 彼多"] book = [" 小 傑", "雷歐 力 "] add_card(book, "酷拉 皮 卡") print(book) # 這會印出什麼?
  5. Q. 以下程式碼的執行結果為何 ? 1) 1 2) 101 3) 100 4)

    程式會出錯 x = 100 def add_one(x): x = x + 1 return x add_one(x) print(x) # 會印出什麼?
  6. Q. 以下程式碼的執行結果為何 ? 1) 1 2) 101 3) 100 4)

    程式會出錯 x = 100 def add_one(x): x = x + 1 return x add_one(x) print(x) # 會印出什麼?
  7. 五倍學院 Python 的變數宣告 ? Python 沒有像其他程式語 言一 樣有 var 或

    let 的「宣告變數」關鍵字,當遇 到 x = 1 的寫法的時候,Python 會從「作 用 域」來判斷是不是需要宣告 一 個新的 變數 x,還是試著去找既有的變數 x 然後把它的值設定成 1。 參考資料 : https://pythonbook.cc/chapters/basic/function#a--1
  8. Q. 以下程式碼的執行結果為何 ? 1) 還是 0 2) 1 3) 2

    4) 這程式會出錯 i = 0 def add_i(): i = i + 1 add_i() print(i) # 這會印出什麼
  9. Q. 以下程式碼的執行結果為何 ? 1) 還是 0 2) 1 3) 2

    4) 這程式會出錯 i = 0 def add_i(): i = i + 1 add_i() print(i) # 這會印出什麼
  10. Q. 最後印出來的值 , 哪一個會跟其它三個不同 ? 1) res1 2) res2 3)

    res3 4) res4 # 檔案:hello.py a = 100 b = 200 def hey(): return 300 res1 = 300 res2 = 100 + 200 res3 = a + b res4 = hey() print(id(res1)) print(id(res2)) print(id(res3)) print(id(res4))
  11. Q. 最後印出來的值 , 哪一個會跟其它三個不同 ? print(id(res1)) print(id(res2)) print(id(res3)) print(id(res4)) 1)

    res1 2) res2 3) res3 4) res4 # 檔案:hello.py a = 100 b = 200 def hey(): return 300 res1 = 300 res2 = 100 + 200 res3 = a + b res4 = hey()
  12. Q. 以下程式碼的執行結果為何 ? 1) True / True / True 2)

    True / True / False 3) False / False / True 4) False / False / False a = 7 b = 11 c = a - b print(c is -4) # 這會印出什麼? c = c - 1 print(c is -5) # 這會印出什麼? c = c - 1 print(c is -6) # 這會印出什麼?
  13. Q. 以下程式碼的執行結果為何 ? 1) True / True / True 2)

    True / True / False 3) False / False / True 4) False / False / False a = 7 b = 11 c = a - b print(c is -4) # 這會印出什麼? c = c - 1 print(c is -5) # 這會印出什麼? c = c - 1 print(c is -6) # 這會印出什麼?
  14. 五倍學院 Python 裡的小整數 >>> a = 256 >>> b =

    256 >>> a is b True >>> a = 257 >>> b = 257 >>> a is b False
  15. Q. 以下程式碼的執行結果為何 ? 1) True / True 2) True /

    False 3) False / True 4) False / False a = float("nan") # NaN b = float("nan") # NaN print(a == a) # NaN 不等於任何值,所以這裡會印出 True print([a] == [a]) # 這裡會印出什麼? print([a] == [b]) # 這裡會印出什麼?
  16. Q. 以下程式碼的執行結果為何 ? 1) True / True 2) True /

    False 3) False / True 4) False / False a = float("nan") # NaN b = float("nan") # NaN print(a == a) # NaN 不等於任何值,所以這裡會印出 True print([a] == [a]) # 這裡會印出什麼? print([a] == [b]) # 這裡會印出什麼?
  17. 五倍學院 神奇的 NaN ? 1. 在 Python 裡的 NaN 是

    一 個浮點數,根據 IEEE 754 的定義,如果拿 NaN 跟任何值比較都會得到 False,包括它 自己 本 身 ! 2. Python 的 List 的比較邏輯是先檢查元素「個數」是否相同。 3. 如果數量 一 樣,接下來比較每個元素是不是同 一 顆物件,也就是比較記憶體位置。 4. 原始碼:Objects/listobject.c(函數名稱 list_richcompare)
  18. Q. 以下程式碼的執行結果為何 ? 1) True / True 2) True /

    False 3) False / True 4) False / False 華安 = (9, 5, 2, 7) print(sorted(華安) == sorted(華安)) # 會印出什麼? print(reversed(華安) == reversed(華安)) # 會印出什麼?
  19. Q. 以下程式碼的執行結果為何 ? 1) True / True 2) True /

    False 3) False / True 4) False / False 華安 = (9, 5, 2, 7) print(sorted(華安) == sorted(華安)) # 會印出什麼? print(reversed(華安) == reversed(華安)) # 會印出什麼?
  20. 五倍學院 sorted vs reversed 1. sorted() 函數的回傳值是 一 個排序好的 List,也就是會得到

    [2, 5, 7, 9] 2. reversed() 函數的回傳值是 一 個 Iterator, 而 兩次 reversed() 產 生 的 Iterator 是不 一 樣東 西
  21. Q. 以下程式碼的執行結果為何 ? 1) [0, 1, 2] 2) [0, 1,

    2, 0, 1, 2] 3) [ ] 4) 語法錯誤無法執行 numbers = (i for i in range(3)) a = list(numbers) b = list(numbers) print(a + b) # 會印出什麼?
  22. Q. 以下程式碼的執行結果為何 ? 1) [0, 1, 2] 2) [0, 1,

    2, 0, 1, 2] 3) [ ] 4) 語法錯誤無法執行 numbers = (i for i in range(3)) a = list(numbers) b = list(numbers) print(a + b) # 會印出什麼?
  23. 五倍學院 Python 的「產生器(Generator)」 1. (i for i in range(3)) 不會產

    生一 個串列, 而 是 一 個「產 生 器」。 2. 產 生 器不是 一 個具體的資料, 而 是可以每次跟它討 一 點東 西 。 3. 使 用 第 一 次 list() 的時候就會把全部內容拿光,所以 a 是 [0, 1, 2] 4. 但是 b 就沒東 西 可以拿了,所以 b 是 [] 5. a + b 就等於是 [0, 1, 2] + [],所以最後答案是 [0, 1, 2]
  24. Q. 以下程式碼的執行結果為何 ? 1) True / True / True 2)

    True / True / False 3) False / True / False 4) 少騙我了 , 這程式根本不會動 ! print(type(1) == type(-1)) # 會印出什麼? print(1 ** 1 == 1 ** -1) # 會印出什麼? print(type(1 ** 1) == type(1 ** -1)) # 會印出什麼?
  25. Q. 以下程式碼的執行結果為何 ? print(type(1) == type(-1)) # 會印出什麼? print(1 **

    1 == 1 ** -1) # 會印出什麼? print(type(1 ** 1) == type(1 ** -1)) # 會印出什麼? 1) True / True / True 2) True / True / False 3) False / True / False 4) 少騙我了 , 這程式根本不會動 !
  26. 五倍學院 Python 的 N 次方 1. type(1) == type(-1) 都是整數,所以兩個都是

    int 2. 1 ** 1 == 1 ** -1,數字 1 的 1 次 方 或 -1 次 方 都是 1?其實不太對,1 的 1 次 方 是 1 沒有錯,但 1 的 -1 次 方 就不是 1 了,是 1.0。 3. 在 Python 拿整數 1 跟浮點數 1.0 做等號的比較會得到 True 4. type(1 ** 1) == type(1 ** -1) 就不是了,這裡 一 個是 int, 一 個是 float。
  27. Q. 以下這 4 種字串串接方式 , 哪一種的效能最差 ? 1) str1 2)

    str2 3) str3 4) str4 # str1 使 用 + 串接 str1 = "Hello " + "World" # str2 使 用 += 串接 str2 = "Hello " str2 += "World" # str3 使 用 F 字串 a = "Hello" b = "World" str3 = f"{a} {b}" # str4 使 用 串列的 .join 方 法 words = ["Hello", "World"] str4 = " ".join(words)
  28. Q. 以下這 4 種字串串接方式 , 哪種的效能最差 ? 1) str1 2)

    str2 3) str3 4) str4 # str1 使 用 + 串接 str1 = "Hello " + "World" # str2 使 用 += 串接 str2 = "Hello " str2 += "World" # str3 使 用 F 字串 a = "Hello" b = "World" str3 = f"{a} {b}" # str4 使 用 串列的 .join 方 法 words = ["Hello", "World"] str4 = " ".join(words)
  29. Q. 以下程式碼的執行結果為何 ? 1) True / True 2) True /

    False 3) False / True 4) False / False # 內建函數 isinstance 可 用 來判斷某個值是不是某種類型,例如: # isinstance(9527, int) #=> True # isinstance("Kitty", int) #=> False isinstance(object, type) # 會印出什麼? isinstance(type, object) # 會印出什麼?
  30. Q. 以下程式碼的執行結果為何 ? 1) True / True 2) True /

    False 3) False / True 4) False / False # 內建函數 isinstance 可 用 來判斷某個值是不是某種類型,例如: # isinstance(9527, int) #=> True # isinstance("Kitty", int) #=> False isinstance(object, type) # 會印出什麼? isinstance(type, object) # 會印出什麼?
  31. 五倍學院 爸爸的爸爸叫爺爺 ? 1. 在 Python 裡的所有類別,包括 type 類別本 身

    ,都是 type 類別 生 出來的, 所以 isinstance(object, type) 會得到 True。 2. 在 Python 3 所有類別的最上層類別都是 object 類別,所以 isinstance(任何東 西 , object) 這句永遠都會成立。 3. 承上,在 Python 所有的東 西 都是物件,type 類別本 身 也是物件,所以 isinstance(type, object) 也會得到 True。
  32. Q. 以下程式碼的執行結果為何 ? 1) True / False / True 2)

    False / False / False 3) False / True / True 4) True / True / True # all([True, True, True]) => True # all([True, False, True]) => False a = [] b = [[]] c = [[[]]] print(all(a)) # 會印出什麼? print(all(b)) # 會印出什麼? print(all(c)) # 會印出什麼?
  33. Q. 以下程式碼的執行結果為何 ? 1) True / False / True 2)

    False / False / False 3) False / True / True 4) True / True / True # all([True, True, True]) => True # all([True, False, True]) => False a = [] b = [[]] c = [[[]]] print(all(a)) # 會印出什麼? print(all(b)) # 會印出什麼? print(all(c)) # 會印出什麼?
  34. 五倍學院 all 全部條件都滿足 ? 1. 在 Python 裡空串列 [] 會被當做

    False 看待,所以 all([[]]) 相當於 all([False]),答案是 False。 2. [[]] 是 一 個「包含空串列」的串列,所以它不是 一 個空的串列。有點像是箱 子 裡 面 裝了 一 個箱 子 ,就算內層的箱 子 是空的,對外層的箱 子 來說它也是有裝東 西 的。 所以 all([[[]]]) 等於是 all([True]) 的效果。 3. all([]) 的話呢?