Python 內建函數:print、input、len、type 核心教學

Python 內建函數(Built-in Functions)是不需要 import 就能直接使用的核心工具,其中 print()input()len()type() 是初學者最常用的四大基礎函數。本文完整解析這四個函數的語法細節與常用參數,並延伸介紹 int()float()str()range()abs()round()min()max()sum() 等實戰高頻內建函數,附型別轉換陷阱與量化資料處理應用範例。

Cinematic dark alchemy laboratory with multiple glowing arcane tool symbols representing Python built-in functions arranged on an ancient stone workbench, amber firelight illuminating print input len type carved as mystical rune tools, deep dramatic shadows, cinematic lighting, 16:9

什麼是內建函數?

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() 永遠回傳字串這件事必須刻進腦子,每次要對輸入值做計算前,先問自己「轉型了嗎?」另外,千萬不要把 lenlisttypeinput 這些名字當成變數名,一旦覆蓋掉就無法使用原本的函數,而且錯誤訊息通常不直觀,找 bug 會找很久。在量化開發中,min()max()sum() 搭配 List Comprehension 幾乎是每天都在用的組合,例如 sum(p for p in pnl if p > 0) 一行就能計算總獲利——熟練這個模式,程式碼會簡潔很多。

張貼留言

較新的 較舊