> >" />
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

五種 Python 轉義表示法

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-01 16:13 ? 次閱讀

1. 為什么要有轉義?

ASCII 表中一共有 128 個字符。這里面有我們非常熟悉的字母、數字、標點符號,這些都可以從我們的鍵盤中輸出。除此之外,還有一些非常特殊的字符,這些字符,我通常很難用鍵盤上的找到,比如制表符、響鈴這種。

為了能將那些特殊字符都能寫入到字符串變量中,就規定了一個用于轉義的字符 ,有了這個字符,你在字符串中看的字符,print 出來后就不一定你原來看到的了。

舉個例子

>> > msg = "hello?13world?13hello?13python"
 >> > print(msg)
hello
     world
          hello
               python
 >> >

是不是有點神奇?變成階梯狀的輸出了。

那個 ?13 又是什么意思呢?

  • 是轉義符號,上面已經說過
  • 013 是 ASCII 編碼的八進制表示,注意前面是 0 且不可省略,而不是字母 o

把八進制的 13 轉成 10 進制后是 11

圖片

對照查看 ASCII 碼表,11 對應的是一個垂直定位符號,這就能解釋,為什么是階梯狀的輸出字符串。

圖片

2. 轉義的 5 種表示法

ASCII 有 128 個字符,如果用 八進制表示,至少得有三位數,才能將其全部表示。這就是為什么說上面的首位 0 不能省略的原因,即使現在用不上,我也得把它空出來。

而如果使用十六進制,只要兩位數就其 ASCII 的字符全部表示出來。同時為了避免和八進制的混淆起來,所以在 后面要加上英文字母 x 表示十六進制,后面再接兩位十六進制的數值。

  • 開頭并接三位 0-7 的數值,表示 8 進制
  • x 開頭并接兩位 0-f 的數值,表示 16進制

因此,當我定義一個字符串的值為 hello + 回車 + world 時,就有了多種方法:

# 第一種方法:8進制
 >> > msg = "hello?12world"
 >> > print(msg)
hello
world
 >> > 

# 第二種方法:16 進制
 >> > msg = "hellox0aworld"
 >> > print(msg)
hello
world
 >> >

通常我們很難記得住一個字符的 ASCII 編號,即使真記住了,也要去轉換成八進制或者16進制,實在是太難了。

因此對于一些常用并且比較特殊字符,我們習慣用另一種類似別名的方式,比如使用 n 表示換行,它與 ?12 、x0a 是等價的。

與此類似的表示法,還有如下這些

圖片

于是,要實現 hello + 回車 + world ,就有了第三種方法

# 第三種方法:使用類似別名的方法
 >> > msg = "hellonworld"
 >> > print(msg)
hello
world
 >> >

到目前為止,我們掌握了 三種轉義的表示法。

已經非常難得了,讓我們的腦洞再大一點吧,接下來再介紹兩種。

ASCII 碼表所能表示字符實在太有限了,想打印一個中文漢字,抱歉,你得借助 Unicode 碼。

Unicode 編碼由 4 個16進制數值組合而成

>> > print("u4E2D")

什么?我為什么知道 的 unicode 是 u4E2D?像下面這樣打印就知道啦

# Python 2.7
 >> > a = u"中"
 >> > a
u'u4e2d'

由此,要實現 hello + 回車 + world ,就有了第四種方法。

# 第四種方法:使用 unicode ,u000a 表示換行
 >> > print('hellou000aworld')
hello
world

看到這里,你是不是以為要結束啦?

不,還沒有。下面還有一種。

Unicode 編碼其實還可以由 8 個32進制數值組合而成,為了以前面的區分開來,這里用 U 開頭。

# 第五種方法:使用 unicode ,U0000000A 表示換行
 >> > print('helloU0000000Aworld')
hello
world

好啦,目前我們掌握了五種轉義的表示法。

總結一下:

  1. 開頭并接三位 0-7 的數值(八進制) ** --- 可以表示所有ASCII 字符**
  2. x 開頭并接兩位 0-f 的數值(十六進制) --- 可以表示所有ASCII 字符
  3. u開頭并接四位 0-f 的數值(十六進制) ** --- 可以表示所有 Unicode 字符**
  4. U開頭并接八位 0-f 的數值(三十二進制))** --- 可以表示所有 Unicode 字符**
  5. 開頭后接除 x、u、U 之外的特定字符 ** --- 僅可表示部分字符**

為什么標題說,轉義也可以炫技呢?

試想一下,假如你的同事,在打印日志時,使用這種 unicode 編碼,然后你在定位問題的時候使用這個關鍵詞去搜,卻發現什么都搜不到?這就撲街了。

圖片

雖然這種行為真的很 sb,但在某些人看來也許是非常牛逼的操作呢?

五種轉義的表示法到這里就介紹完成,接下來是更多轉義相關的內容,也是非常有意思的內容,有興趣的可以繼續往下看。

3. raw 字符串

當一個字符串中具有轉義的字符時,我們使用 print 打印后,正常情況下,輸出的不是我們原來在字符串中看到的那樣子。

那如果我們需要輸出 hellonworld ,不希望 Python 將 n 轉義成 換行符呢?

這種情況下,你可以在定義時將字符串定義成 raw 字符串,只要在字符串前面加個 r 或者 R 即可。

>> > print(r"hellonworld")
hellonworld
 >> > 
 >> > print(R"hellonworld")
hellonworld

然而,不是所有時候都可以加 r 的,比如當你的字符串是由某個程序/函數返回給你的,而不是你自己生成的

# 假設這個是外來數據,返回 "hellonworld"
 > >> body = spider()
 > >> print(body)
hello
world

這個時候打印它,n 就是換行打印。

4. 使用 repr

對于上面那種無法使用 r 的情況,可以試一下 repr 來解決這個需求:

>> > body = repr(spider())
 >> > print(body)
'hellonworld'

經過 repr 函數的處理后,為讓 print 后的結果,接近字符串本身的樣子,它實際上做了兩件事

  1. 將 變為了
  2. 在字符串的首尾添加 ' 或者 "

你可以在 Python Shell 下敲入 變量 回車,就可以能看出端倪。

首尾是添加 ' 還是 " ,取決于你原字符串。

>> > body="hellonworld"
 >> > repr(body)
"'hello
world'"
 >> > 
 >> > 
 >> > body='hellonworld'
 >> > repr(body)
"'hello
world'"

5. 使用 string_escape

如果你還在使用 Python 2 ,其實還可以使用另一種方法。

那就是使用 string.encode('string_escape') 的方法,它同樣可以達到 repr 的效果

>> > "hellonworld".encode('string_escape')
'hello
world'
 >> >

6. 查看原生字符串

綜上,想查看原生字符串有兩種方法:

  1. 如果你在 Python Shell 交互模式下,那么敲擊變量回車
  2. 如果不在 Python Shell 交互模式下,可先使用 repr 處理一下,再使用 print 打印
>> > body="hellonworld"
 >> > 
 >> > body
'hellonworld'
 >> > 
 >> > print(repr(body))
'hellonworld'
 >> >

7. 恢復轉義:轉成原字符串

經過 repr 處理過或者 取消轉義過的字符串,有沒有辦法再回退出去,變成原先的有轉義的字符串呢?

答案是:有。

如果你使用 Python 2,可以這樣:

>> > body="hello
world"
 >> > 
 >> > body
'hello
world'
 >> > 
 >> > body.decode('string_escape')
'hellonworld'
 >> >

如果你使用 Python 3 ,可以這樣:

>> > body="hello
world"
 >> > 
 >> > body       
'hello
world'
 >> > 
 >> > bytes(body, "utf-8").decode("unicode_escape")
'hellonworld'
 >> >

什么?還要區分 Python 2 和 Python 3?太麻煩了吧。

明哥教你用一種可以兼容 Python 2 和 Python 3 的寫法。

首先是在 Python 2 中的輸出

>> > import codecs 
 >> > body="hello
world"
 >> > 
 >> > codecs.decode(body, 'unicode_escape')
u'hellonworld'
> >>

然后再看看 Python 3 中的輸出

>> > import codecs
 >> > body="hello
world"
 >> > 
 >> > codecs.decode(body, 'unicode_escape')
'hellonworld'
 >> >

可以看到 Pyhton 2 中的輸出 有一個 u ,而 Python 3 的輸出沒有了 u,但無論如何 ,他們都取消了轉義。

以上,就是我為大家整理的關于 Python 中轉義的全部內容了,整理的過程,不斷的發現新知識,幫助到大家的同時,自己也對轉義的一些內容有了更深的理解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鍵盤
    +關注

    關注

    4

    文章

    846

    瀏覽量

    39123
  • ASCII
    +關注

    關注

    4

    文章

    169

    瀏覽量

    34688
  • 字符串
    +關注

    關注

    1

    文章

    553

    瀏覽量

    20232
  • python
    +關注

    關注

    52

    文章

    4698

    瀏覽量

    83610
收藏 人收藏

    評論

    相關推薦

    極品五筆輸入法教程-下載

    ;nbsp;&nbsp;&nbsp;五筆輸入法是從80年代開始流行起來的漢字輸入,經過20多年的推廣已經深得人心,直到今天五筆輸入法已經有幾十改進版本,上百
    發表于 01-25 09:17

    史上最全Python數據類型詳解

    數據類型是每個編程語言必不可少的基礎知識,也是必須要掌握的技能,很多人知識簡單的進行理解,并沒有很系統的進行知識的梳理,以下是對python語言的全部數據類型詳細匯總:Python中可以自定義
    發表于 06-15 14:57

    入門必看:python學習第一課

    類型split()拆分字符串。通過指定分隔符對字符串進行切片,并返回分割后的字符串列表(list)二、python中數字的表示十進制:1,2,-1,4十六進制:0x10,0xab八進制:0o35
    發表于 09-20 16:42

    淺析漸近表示和二分

    《算法圖解》NOTE 1 算法的漸近表示以及二分
    發表于 10-10 10:58

    python算法之使用分治求解凸包

    python算法教程》Day11 - 分治求解平面凸包問題
    發表于 11-01 09:14

    Python 轉義字符的5表示方法

    ('hello\U0000000Aworld')helloworld好啦,目前我們掌握了轉義表示??偨Y一下:\ 開頭并接三位 0-7
    發表于 04-11 15:18

    數據處理轉義序列的登記規程 GB 12054-1989

    數據處理轉義序列的登記規程 GB 12054-1989 本標準適用于GB2311中所規定的轉義序列的登記,但不包括該標準中說明用于表示單個增補控制功能的部分轉義序列ESC Fs
    發表于 04-29 16:40 ?11次下載

    c語言中的轉義字符

    所有的ASCII碼都可以用“\”加數字(一般是8進制數字)來表示。而C中定義了一些字母前加“\”來表示常見的那些不能顯示的ASCII字符,如\0,\t,\n等,就稱為轉義字符,因為后面的字符,都不是它本來的ASCII字符意思了。
    發表于 11-15 14:34 ?3961次閱讀
    c語言中的<b class='flag-5'>轉義</b>字符

    Python轉義字符使用總結資料免費下載

    本文檔的主要內容詳細介紹的是Python轉義字符使用總結資料免費下載主要內容包括了:Python轉義字符,Python字符串運算符,
    發表于 01-17 17:24 ?6次下載
    <b class='flag-5'>Python</b><b class='flag-5'>轉義</b>字符使用總結資料免費下載

    Python字符的實例詳細說明

    本文檔的主要內容詳細介紹的是Python字符的實例詳細說明包括了:Python 轉義字符,Python 字符串運算符,Python 字符串格
    發表于 10-14 17:13 ?7次下載
    <b class='flag-5'>Python</b>字符的實例詳細說明

    python的re模塊詳細資料總結

    Python 用“ \\\\ ” 表示正則表達式中的“ \ ” ,因為正則表達式中如果要匹配“ \ ” ,需要用來轉義,變成“ \\ ” ,而Python 語法中又需要對字符串中每一個
    發表于 10-20 17:33 ?8次下載
    <b class='flag-5'>python</b>的re模塊詳細資料總結

    Python轉義字符的表示方法

    ASCII 表中一共有 128 個字符。這里面有我們非常熟悉的字母、數字、標點符號,都可以直接使用鍵盤輸入。除此之外,還有一些非常特殊的字符,這些字符,通常很難在鍵盤上的找到,比如制表符、響鈴這種。
    的頭像 發表于 04-11 15:18 ?1660次閱讀

    轉義字符\n

    三引號能夠實現換行功能;在Python中,像 \n 這樣的字符我們稱為轉義字符;
    的頭像 發表于 02-23 14:49 ?1235次閱讀
    <b class='flag-5'>轉義</b>字符\n

    python字符串編寫有哪些方法

    python通過反斜杠\開頭來轉義特殊字符。比如用’\n’轉義換行符。 len()函數中,一個轉義字符占1個長度。
    的頭像 發表于 02-23 15:02 ?342次閱讀

    python如何換行而不運行代碼

    和可讀性。 在Python中,可以使用兩個主要的方法進行換行:使用反斜杠()和使用圓括號(())。 第一種方式是使用反斜杠()來表示換行。在Python中,反斜杠是一個轉義字符,它可以
    的頭像 發表于 11-24 09:50 ?1958次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>