Python 內建了六個會改變大小寫的字串方法:.lower()、.upper()、.title()、.capitalize()、.swapcase(),以及 .casefold()。每一個都會接收原始字串,對每個字元套用一條確定性的規則,然後回傳一個新的字串——Python 中的字串是不可變的,因此原始字串永遠不會被修改。這些方法涵蓋了日常工作:在比較之前把使用者輸入轉成小寫、把常數顯示成大寫、把句子的第一個字母大寫,以及為了風格效果而交換大小寫。但一旦你需要從 snake_case 轉成 camelCase,或是從 PascalCase 轉成 kebab-case 時,內建方法就幫不上忙了,因為識別字中的大小寫屬於語法層次——任何一個字母錯誤都會讓程式碼失效。這正是像 Case Converter 這種瀏覽器工具派上用場的時候,它會跨空格、底線、連字號,以及 camelCase 邊界重新對你的輸入進行斷詞,然後以十種樣式並排重新輸出。本指南接下來會逐一說明每個 Python 方法、明確展示它們的回傳結果,並解釋什麼時候你應該改用工具。

Python 的六個內建字串大小寫方法
凡是使用標準 Python 能做到的大小寫轉換,都來自 str 型別上的六個方法之一。它們在任何字串上都可以直接使用,無需匯入任何模組,這也是它們幾乎出現在每個程式碼庫與教學中的原因。
- .lower() — 回傳字串的副本,其中每個有大小寫的字元都會對應為小寫。最常用於在比較或儲存之前標準化使用者輸入。
- .upper() — 回傳字串的副本,其中每個有大小寫的字元都會對應為大寫。常見於日誌訊息、橫幅文字,以及類似常數的顯示字串。
- .title() — 回傳字串的副本,其中每個單字的第一個字母大寫,其餘字母小寫。所謂的單字以非字母字元作為邊界來界定。
- .capitalize() — 回傳字串的副本,其中只有第一個字元大寫,其餘所有字元都是小寫,不管單字邊界在哪裡。
- .swapcase() — 回傳字串的副本,其中大寫字母會轉成小寫,小寫字母會轉成大寫。
- .casefold() — 回傳經過積極標準化以便進行不區分大小寫比對的副本。它在 ASCII 中沒有對應小寫形式的字元上,處理得比 .lower() 更徹底。
由於字串是不可變的,上述每個方法都會回傳一個新的字串。呼叫 "Hello".lower() 並不會把原本的字面值變成 "hello";它會產生一個全新的值,你必須指派、回傳或傳遞到某處才能使用。
每個 Python 方法實際回傳什麼
下表以 "Hello World" 作為基準,讓各方法之間的差異一目了然。把這些輸出結果貼到 Python REPL 中,得到的值會完全一致。
| 方法 | 呼叫 | 結果 |
|---|---|---|
| .lower() | "Hello World".lower() | "hello world" |
| .upper() | "Hello World".upper() | "HELLO WORLD" |
| .title() | "hello world".title() | "Hello World" |
| .capitalize() | "hello world".capitalize() | "Hello world" |
| .swapcase() | "Hello World".swapcase() | "hELLO wORLD" |
| .casefold() | "Straße".casefold() | "strasse" |
最後一列很重要:.lower() 會把 "Straße" 保留為 "straße",而 .casefold() 則會把 sharp-s 折疊成兩個 s。這就是經驗法則——.lower() 用於顯示,.casefold() 用於跨語言的不區分大小寫比對。
為什麼內建方法無法處理命名慣例
上述六個方法是為書面語言設計的。它們認得字母,也認得空格。它們並不知道 user_email_address 中的底線是單字分隔符,也不知道 getHttpResponse 中的大寫 H 是 camelCase 的邊界。如果只用內建方法請 Python 把 "user_email_address" 轉成 camelCase,最後你會寫出一個小幫手函式:在底線處切開、把第一個之後的各部分首字大寫、然後串接起來。
那段小程式只能處理單一種分隔符,而且會忽略連字號、標點符號、緊貼單字的數字,以及像 HTMLParser 這種充滿縮寫詞的 PascalCase 輸入。每個真實的程式碼庫都會以稍微不同的方式重新發明這個小函式,而每個版本又會在稍微不同的邊緣情況下出錯。命名樣式轉換更像是一個剖析 (parsing) 問題,而非大小寫問題,而 Python 的內建方法根本不做剖析。
同樣的限制也會阻擋反方向的轉換。如果你從 "hello-world-example" 出發,無論怎麼組合 .upper()、.lower() 和 .title(),都無法一次就得到 helloWorldExample。你只能手動切開、首字大寫、再重新串接,或是直接交給已經能可靠完成這件事的工具。
不寫程式碼也能在 Python 中轉換大小寫
對於一次性的轉換——重新命名變數、草擬 slug、標準化一整欄的 API 欄位名稱——最快的路徑就是用瀏覽器工具。Case Converter 會跨空格、底線、連字號、標點符號,以及 camelCase 邊界重新對你的文字進行斷詞,然後在同一個面板中顯示所有常見的書寫與命名樣式。以下是它的使用方式。
- 在瀏覽器中開啟 Case Converter。
- 把你的 Python 識別字、句子或標題輸入或貼到輸入框中。
- 查看下方的面板:十種輸出樣式都會在你輸入或貼上時即時更新,因此沒有提交按鈕需要點。
- 並排比較各種變體。snake_case、camelCase、PascalCase、kebab-case,以及 CONSTANT_CASE 都會同時出現,另外還有 UPPERCASE、lowercase、Title Case、Sentence case,以及一種交替樣式。
- 在你想要的那個變體旁邊點擊 Copy,然後直接貼到你的編輯器、終端機或設定檔中。
整個過程都在 JavaScript 中於本機執行,因此資料不會離開這個頁面。當你正在轉換的識別字包含內部名稱、密鑰片段,或是你不想上傳的資料庫欄位時,這點尤其重要。
Python 開發者實際使用的命名慣例
PEP 8(Python 風格指南)明確規定了哪裡該用哪種大小寫。下表是精簡過的對照表;完整的規則可以在 Python Enhancement Proposal 原文找到。
| 識別字類型 | 慣例 | 範例 |
|---|---|---|
| 模組名稱 | 簡短,全部小寫 | requests |
| 套件名稱 | 簡短,全部小寫 | pandas |
| 函式名稱 | snake_case | calculate_total() |
| 變數名稱 | snake_case | user_count |
| 常數 | UPPER_SNAKE_CASE | MAX_RETRIES |
| 類別名稱 | CapWords (PascalCase) | HttpRequest |
| 例外名稱 | CapWords,以 Error 結尾 | ValueError |
| 方法名稱 | snake_case | to_camel() |
| 實例方法的第一個參數 | self | def parse(self, text): |
| 類別方法的第一個參數 | cls | def from_dict(cls, data): |
當你需要把程式碼從一種慣例改寫成另一種——例如把使用 camelCase 的 JavaScript SDK 翻譯成需要 snake_case 的 Python 套件——瓶頸在於能否可靠地處理每一個識別字。重新斷詞的工具是批次轉換最安全的方式,因為一旦你確認某個名稱的剖析結果正確,同樣的輸入就永遠會產生同樣的輸出。
在 Python 方法與瀏覽器工具之間做出選擇
當轉換屬於程式邏輯的一部分時——標準化輸入、格式化輸出、以不區分大小寫的方式比較值——請使用 Python 的內建方法。它們成本低、無相依性,而且在程式碼審查中容易閱讀。
當轉換只是一次性的瑣事時——重新命名單一識別字、格式化一個標題、把一整欄 API 欄位從 camelCase 的 JSON 遷移到 snake_case 的資料庫欄位——請改用瀏覽器工具。這類工作真正的風險不在程式碼,而在打錯字。同時看到十種輸出樣式,並精準複製你想要的那一個,就能消除這個風險。
如果你在貼到表單或 SQL WHERE 子句之前還需要先測量結果的長度,Character Counter 能在你輸入的同時即時顯示字元長度,而且完全不需要上傳任何資料。這兩個工具加在一起,就能涵蓋在實際 Python 腳本之外,大部分大小寫轉換工作會被要求做的事。
延伸閱讀:Capitalize Each Word: From Title Case to camelCase。
延伸閱讀:Get a Random Word From a List: Python and Browser Options。