Python 內建函數(Built-in Functions)是不需要 import 就能直接使用的核心工具,其中 print()、input()、len()、type() 是初學者最常用的四大基礎函數。本文完整解析這四個函數的語法細節與常用參數,並延伸介紹 int()、float()、str()、range()、abs()、round()、min()、max()、sum() 等實戰高頻內建函數,附型別轉換陷阱與量化資料處理應用範例。
什麼是內建函數?
Python 內建函數是語言本身預先定義好、隨時可以直接呼叫的工具函數,不需要 import 任何模組。Python 3 共有 68 個內建函數,涵蓋輸出入、型別轉換、數學計算、序列操作等各類用途,是每位 Python 開發者每天都在使用的核心工具。
可以把內建函數想像成煉金坊裡永遠備著的基本工具箱——鐵鎚、鑷子、量杯、溫度計,不需要特別去倉庫領取,隨手就能用。其中 print()、input()、len()、type() 是最基礎的四件,從第一行程式碼就會用到,貫穿整個 Python 學習旅程。
核心語法:四大基礎函數實戰
# === print():輸出資料到終端機 ===
# 基本用法
print("Hello, Python!") # Hello, Python!
print(42) # 42
print(3.14) # 3.14
# 一次印多個值(預設用空格分隔)
print("價格:", 185.2, "元") # 價格: 185.2 元
# sep:自訂分隔符號
print("2024", "01", "03", sep="-") # 2024-01-03
# end:自訂結尾字元(預設是換行 \n)
print("載入中", end="")
print("...") # 載入中...(同一行)
# 搭配 f-string(最推薦的格式化輸出)
name = "離火"
score = 98.5
print(f"使用者:{name},分數:{score:.1f}") # 使用者:離火,分數:98.5
print()最常用的兩個參數是sep(分隔多個引數的符號,預設空格)與end(每次 print 結尾的字元,預設換行\n)。熟悉這兩個參數可以精準控制輸出格式,不需要手動拼接字串。
# === input():從終端機接收使用者輸入 ===
# 基本用法(回傳值永遠是字串 str)
name = input("請輸入你的名字:")
print(f"你好,{name}!")
# 重要:input() 回傳值是字串,需手動轉型才能做數學
age_str = input("請輸入年齡:") # 假設使用者輸入 25
age = int(age_str) # 轉成整數才能做計算
print(f"明年你 {age + 1} 歲")
# 一行寫法:直接在 input 外層套型別轉換
price = float(input("請輸入股價:")) # 轉成浮點數
shares = int(input("請輸入股數:")) # 轉成整數
total = price * shares
print(f"總市值:{total:,.0f} 元")
input()的回傳值永遠是字串(str),這是最常見的初學者陷阱。若需要對輸入值做數學運算,必須先用int()或float()轉型,否則會得到字串拼接而非數值相加(例如"5" + "3"結果是"53"而非8)。
# === len():取得序列的長度(元素數量)===
print(len("Python")) # 6(字串長度)
print(len([1, 2, 3, 4, 5])) # 5(List 元素數)
print(len({'a': 1, 'b': 2})) # 2(Dict key 數量)
print(len((10, 20, 30))) # 3(Tuple 元素數)
print(len({1, 2, 2, 3})) # 3(Set 去重後的數量)
# 常見應用:判斷是否為空
my_list = []
if len(my_list) == 0:
print("串列是空的")
# 更 Pythonic 的寫法(直接用 Truthy/Falsy)
if not my_list:
print("串列是空的")
# === type():查詢物件的資料型別 ===
print(type(42)) #
print(type(3.14)) #
print(type("hello")) #
print(type(True)) #
print(type([1, 2, 3])) #
print(type(None)) #
# 用 type() 進行型別判斷(不推薦,建議用 isinstance)
x = 42
if type(x) == int:
print("x 是整數")
# ✅ 更推薦:isinstance()(支援繼承關係)
if isinstance(x, int):
print("x 是整數") # x 是整數
規則與注意事項
| 函數 | 重要特性 | 常見陷阱 |
|---|---|---|
print() |
預設 sep=" ",end="\n";f-string 是最佳格式化方式 | 誤以為 print 有回傳值(回傳 None) |
input() |
永遠回傳 str,需手動轉型 | 直接對 input() 做數學運算 → TypeError 或字串拼接 |
len() |
適用所有序列與容器;空容器回傳 0 | 對整數或浮點數呼叫 len() → TypeError |
type() |
回傳型別物件;查看型別用,條件判斷建議改用 isinstance() | 用 type() == int 無法處理子類別繼承 |
| 內建函數名稱不可作為變數名 | length = len(lst) |
len = 5 → 覆蓋內建函數,之後無法使用 |
常見錯誤與防呆
錯誤一:input() 回傳字串,直接做數學運算
# ❌ 錯誤寫法(字串 + 字串 = 字串拼接,不是數字相加)
a = input("輸入第一個數:") # 使用者輸入 5
b = input("輸入第二個數:") # 使用者輸入 3
print(a + b) # 輸出:53(字串拼接!不是 8)
# ✅ 正確寫法:先用 int() 或 float() 轉型
a = int(input("輸入第一個數:"))
b = int(input("輸入第二個數:"))
print(a + b) # 輸出:8
錯誤二:用內建函數名稱當變數名,覆蓋原函數
# ❌ 錯誤寫法(覆蓋內建 len 函數)
len = 10 # 把 len 這個名字指向整數 10
print(len([1, 2, 3])) # TypeError: 'int' object is not callable
# ✅ 正確做法:使用其他變數名
length = 10
print(len([1, 2, 3])) # 3(len 函數正常運作)
# 若不小心覆蓋,重新啟動 kernel 或用 del 刪除
del len # 刪除自訂的 len 變數,恢復內建函數
錯誤三:對非序列型別呼叫 len()
# ❌ 錯誤寫法(整數和浮點數沒有長度)
print(len(12345)) # TypeError: object of type 'int' has no len()
print(len(3.14)) # TypeError
# ✅ 若要取數字的位數,先轉成字串
print(len(str(12345))) # 5(5 位數)
print(len(str(3.14))) # 4(含小數點共 4 個字元)
進階用法
型別轉換函數:int、float、str
型別轉換是 Python 日常開發中非常高頻的操作,int()、float()、str() 是三個最基礎的轉換函數,搭配 input() 使用時幾乎不可缺少。
# int():轉換為整數
print(int(3.9)) # 3(無條件捨去,非四捨五入)
print(int("42")) # 42(字串轉整數)
print(int(True)) # 1
print(int(False)) # 0
# print(int("3.14")) # ValueError:字串含小數點無法直接轉 int
# float():轉換為浮點數
print(float(5)) # 5.0
print(float("3.14")) # 3.14
print(float("1e3")) # 1000.0(科學記號)
# str():轉換為字串
print(str(100)) # '100'
print(str(3.14)) # '3.14'
print(str(True)) # 'True'
# 安全的字串轉數字(加 try-except 防止崩潰)
raw = "abc"
try:
value = int(raw)
except ValueError:
value = 0
print(f"'{raw}' 無法轉換為整數,使用預設值 0")
數學類內建函數:abs、round、min、max、sum
Python 提供多個常用的數學內建函數,在量化計算中尤其實用,不需要 import math 就能完成基礎數值處理。
closes = [102.5, 98.3, 115.7, 88.9, 121.0, 95.6]
pnl_list = [350, -120, 580, -200, 430, -80]
# abs():絕對值
print(abs(-350)) # 350
print(abs(3.14)) # 3.14
# round():四捨五入(可指定小數位數)
print(round(3.14159, 2)) # 3.14
print(round(2.5)) # 2(Python 採銀行家捨入,偶數優先)
print(round(3.5)) # 4
# min() / max():最小值 / 最大值
print(min(closes)) # 88.9
print(max(closes)) # 121.0
print(min(10, 20, 5, 8)) # 5(也可直接傳多個引數)
# sum():加總
print(sum(pnl_list)) # 960(總損益)
print(sum(closes) / len(closes)) # 103.67(平均收盤價)
# 組合應用:計算勝率
wins = [p for p in pnl_list if p > 0]
win_rate = len(wins) / len(pnl_list) * 100
print(f"勝率:{win_rate:.1f}%") # 勝率:50.0%
print(f"平均獲利:{sum(wins)/len(wins):.1f}") # 平均獲利:453.3
sorted() 與 enumerate() 補充
sorted() 回傳排序後的新 List,不修改原序列;搭配 key 參數可以自訂排序依據,是量化資料排序的利器。
closes = [102.5, 98.3, 115.7, 88.9, 121.0]
# sorted():回傳排序後的新 List(原序列不變)
asc = sorted(closes) # 升冪
desc = sorted(closes, reverse=True) # 降冪
print(asc) # [88.9, 98.3, 102.5, 115.7, 121.0]
print(desc) # [121.0, 115.7, 102.5, 98.3, 88.9]
# key 參數:按絕對值排序
pnl = [350, -580, 120, -430, 80]
by_abs = sorted(pnl, key=abs)
print(by_abs) # [80, 120, 350, -430, -580]
# enumerate():同時取索引與值(第 16 篇已介紹,此處複習)
for i, c in enumerate(closes, start=1):
print(f"第 {i} 根:{c}")
煉金坊小叮嚀
內建函數是 Python 最平易近人的一面——不需要任何準備,隨手就能用。但有幾個細節值得特別留意:input() 永遠回傳字串這件事必須刻進腦子,每次要對輸入值做計算前,先問自己「轉型了嗎?」另外,千萬不要把 len、list、type、input 這些名字當成變數名,一旦覆蓋掉就無法使用原本的函數,而且錯誤訊息通常不直觀,找 bug 會找很久。在量化開發中,min()、max()、sum() 搭配 List Comprehension 幾乎是每天都在用的組合,例如 sum(p for p in pnl if p > 0) 一行就能計算總獲利——熟練這個模式,程式碼會簡潔很多。