Try   HackMD

L4 Escape sequence (跳脫序列)

tags: Python escape sequence

目錄

• Definition (定義)
• List of Escape Sequence (常見的跳脫序列)
• Escape Quotes (引號使用)
• Escape Backslash (反斜線使用)
• Escape NewLine (換行使用)
• Escape Carriage Return (回車使用)
• Escape Horizontal Tab (水平定位使用)
• Escape Backspace (退格使用)
• Escape Unicode (萬國碼使用)
• Escape Octal (八進位字元使用)
• Escape Hexadecimal (十六進位字元使用)
• Raw String (原始字串)

• Definition (定義)

什麼是跳脫序列呢?

在字串中,有些字元是無法直接輸入或顯示的,因此需要使用跳脫序列來表示這些特殊字元。
跳脫序列是由反斜線 (backslash) 加上一個字元所組成,例如 \n 表示換行,\t 表示水平定位,\\ 表示反斜線本身。

所以我們可以認為

跳脫序列可以幫助我們表達那些很難或無法直接表示的字元。


• List of Escape Sequence (常見的跳脫序列)

Escape Sequence Meaning
\" 雙引號
\' 單引號
\\ 反斜線
\n 換行
\r 回車
\t 水平定位
\b 退格
\N{name} 查找Unicode資料庫中的名稱
\u0000 16位元的Unicode字元
\U00000000 32位元的Unicode字元
\ooo 8進位字元
\xhh 16進位字元

• Escape Quotes (引號使用)

在講L2 Primitive types的時候我們有講到Python使用單雙引號來定義 str,當字串內部需要使用引號時,除了避免內外使用相同引號之外,還有一個方法就是使用跳脫序列

以下為範例:

string = 'I'm good at Python.' # SyntaxError

上述的程式碼會產生語法錯誤導致程式終止。

而我們可以使用跳脫序列來避免錯誤:

string = 'I\'m good at Python' # I'm good at Python

雖然這邊使用的是單引號,但在雙引號上的用法是完全相同的,就不再贅述。
在引號前方加入 \ 就可以讓引號跳脫出字串變成單純的字元,不再有當作字串辨識符號的意義。


• Escape Backslash (反斜線使用)

既然我們已經知道 \ 在字串中代表著跳脫字元,那我們又該如何輸出他們本身呢?

以下為範例:

string = "C:\Python\test.py" # C:\python est.py

上述的程式碼因為 \ 被當作跳脫字元使用,因此會結合有特殊定義的字元形成跳脫序列,也就沒辦法正常地輸出我們想要的檔案位址。

而我們同樣可以使用跳脫序列來正常輸出這些位址。

string = "C:\\Python\\test.py" # C:\Python\test.py

這邊的第一個 \ 當作跳脫字元,讓第二個 \ 可以做為單純的字元做輸出,不再有當作跳脫字元的意義。


• Escape NewLine (換行使用)

如果想要讓字串做出換行的動作的話,\n 是個很常見的用法。

以下為範例:

string = "Hello\nWorld" # Hello # World

上述的程式碼在 HelloWorld 中間使用 \n ,它可以讓游標跳到下一行行首在繼續輸出接下來的字串,因此這兩個單字就會被分成兩行。


• Escape Carriage Return (回車使用)

\r 的功能比較特殊,他可以讓游標回到行首再繼續以接下來的字串覆蓋掉之前的字元。

以下為範例:

string = "Justin loves Python\rMatcha" # Matcha loves Python

再上述的程式碼中,因為 \r 後面的 Matcha 有6個字元,而 Justin 也剛好有6個字元,於是在使用回車會到行首後,Matcha剛好覆蓋掉Justin,所以結果為Matcha loves Python

# Origin: Justin loves Python # Change: Matcha # Output: Matcha loves Python

我們再看下個例子:

string = "You love Python\rI" # Iou love Python

由於 I 只有一個字元,當游標回到行首時,他只會覆蓋掉 Y 而其他字元不受影響。

# Origin: You love Python # Change: I # Output: Iou love Python

如果想知道更多關於 \r 和 \n 的差異可以看我的IG貼文:


• Escape Horizontal Tab (水平定位使用)

相信學習Python的各位應該都知道tab是很常使用的縮排功能,通常為4個或8個空格。
而我們也可以在字串中使用 \t 來代表 tab

以下為範例:

string = "Hello\tWorld" # Hello World

從上述的程式碼可以看出 \t 的功能就像按下 tab 一樣在字串中產生空格。

舉個常見的例子:

string_1 = "2\tx\t2\t=\t4" # 2 x 2 = 4 string_2 = "7\tx7\t=\t49" # 7 x 7 = 49 stirng_3 = "10\tx\t10\t=\t100" # 10 x 10 = 100

\t 可以很好的幫我們做出排版。


• Escape Backspace (退格使用)

其實 \b 的用法就和我們鍵盤上的 Backspace 一樣,可以刪除掉前一格字元。

以下為範例:

string = "Hello \bWorld" # HelloWorld

在上述的例子中,\b 的作用就是刪除掉他前面的空格,於是HelloWorld就相連在一起了。

我們再看下個例子:

string = "Have a nice d\t\bay" # Have a nice day

\b 除了空格也能刪除其他字元甚至是其他跳脫序列


• Escape Unicode (萬國碼使用)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

上面的圖片是一個飛機的表情符號,通常我們要在程式中使用表情符號或其他特殊字元,我們會使用Unicode來表示,而首先要介紹的是使用 emoji 的名稱

以下為範例:

string = "\N{Airplane}" # ✈

在上述的例子中,我們會使用 \N 這個跳脫序列,後面接上 {},裡面放上表情符號的名稱,比較需要注意的是 N 要為大寫,否則會和小寫的換行混淆。


而我們還有另一個方法同樣可以叫出這個表情符號,就是使用 \u 這個跳脫序列,可以看到在上面飛機的下方有一個U+2708的編碼,這就是他在Unicode中的編碼,而我們也需要使用到它。

以下為範例:

string = "\u2708" # ✈

省略掉 U+ 的部分,剩餘的就是我們需要用到的,直接接在 \u 後面就可以同樣表示該Unicode字元。
但這邊有一件事需要特別注意,有些表情符號可能它的編碼會超過4個字元,像U+1F680,這個時候我們就不能使用 \u 來表示這個符號,因為 \u 後面最多只能接收4個字元,因此必須使用下面的方法來替代。


當我們的Unicode Number超過4個字元時,除了使用 \N 及名稱以外,我們也可以使用 \U 這個跳脫序列。

以下為範例:

string = "\U00002708" # ✈

由於 \U 要接收8個字元,因此我們必須將剩餘的部分用0補齊,這樣才能正常地輸出我們想要的字元。

同樣地,像剛剛舉例的U+1F680就可以用這個方法呈現:

string = "\U0001F680" # 🚀

同樣使用0補齊直到總共為8個字元。

如果不知道甚麼是Unicode的可以看我的IG貼文:


• Escape Octal (八進位字元使用)

我們也可以使用 \ooo 來使用ASCII Table中的八進位編碼來表示字元,使用方法為在 \ 後方直接接上3個數字。

以下為範例:

string = "\110\105\114\114\117\040\127\117\122\114\104" # HELLO WORLD

• Escape Hexadecimal (十六進位字元使用)

和上面的八進位字元使用一樣,使用ASCII Table內的十六進位編碼來表示字元,使用方法為在 \x 後方接上2個數字。

以下為範例:

string = "\x48\x45\x4C\x4C\x4F\x20\x57\x4F\x52\x4C\x44" # HELLO WORLD

如果不知道甚麼是ASCII的可以看我的IG貼文:


• Raw String (原始字串)

我們有一種方法可以忽略在字串中的特殊字元,就是在宣告字串時將他宣告為raw string,具體做法就是在字串的引號前方加上 r 或是 R

以下為範例:

string = "Hello \bWorld" # HelloWorld

在正常宣告的字串中跳脫序列會發揮它的作用,而使用原始字串就可以讓它變成單純的字元。

string = r"Hello \bWorld" # Hello \bWorld

這也可以應用在之前說到取檔案位址的功能。

string = r"C:\Python\test.py" # C:\python\test.py

但是raw string有一點比較特別的是,如果將 \ 放在字串的最後,會導致當成判斷字串的引號被當成跳脫序列而產生錯誤。

具體如下:

string = r"\" # SyntaxError

上方用來判斷字串的引號被 \ 嘗試變成跳脫序列,導致字串無法定義。

string = r"a\\" # a\\

而在上述的程式碼中 \ 互相變成跳脫序列,所以不會影響到字串的判定,是可以正常運作的。

因此,raw string 的結尾不能有奇數個 \,會導致最後一個 \ 嘗試去跳脫引號導致錯誤。


• 希望這些筆記可以幫到你 •

如果有興趣了解更多歡迎追蹤我的
Intagram
Youtube
Github

也可以幫我按個讚賞

上一篇: L3 Type casting (型態轉換) 下一篇: L5 Print() (輸出)