> > msg = "hello?13world?13hello?13python" > > >" />

欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

五種 Python 轉(zhuǎn)義表示法

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

1. 為什么要有轉(zhuǎn)義?

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

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

舉個例子

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

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

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

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

把八進(jìn)制的 13 轉(zhuǎn)成 10 進(jìn)制后是 11

圖片

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

圖片

2. 轉(zhuǎn)義的 5 種表示法

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

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

  • 開頭并接三位 0-7 的數(shù)值,表示 8 進(jìn)制
  • x 開頭并接兩位 0-f 的數(shù)值,表示 16進(jìn)制

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

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

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

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

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

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

圖片

于是,要實現(xiàn) hello + 回車 + world ,就有了第三種方法

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

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

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

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

Unicode 編碼由 4 個16進(jìn)制數(shù)值組合而成

>> > print("u4E2D")

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

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

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

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

看到這里,你是不是以為要結(jié)束啦?

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

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

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

好啦,目前我們掌握了五種轉(zhuǎn)義的表示法。

總結(jié)一下:

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

為什么標(biāo)題說,轉(zhuǎn)義也可以炫技呢?

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

圖片

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

五種轉(zhuǎn)義的表示法到這里就介紹完成,接下來是更多轉(zhuǎn)義相關(guān)的內(nèi)容,也是非常有意思的內(nèi)容,有興趣的可以繼續(xù)往下看。

3. raw 字符串

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

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

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

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

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

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

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

4. 使用 repr

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

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

經(jīng)過 repr 函數(shù)的處理后,為讓 print 后的結(jié)果,接近字符串本身的樣子,它實際上做了兩件事

  1. 將 變?yōu)榱?/li>
  2. 在字符串的首尾添加 ' 或者 "

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

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

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

5. 使用 string_escape

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

那就是使用 string.encode('string_escape') 的方法,它同樣可以達(dá)到 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. 恢復(fù)轉(zhuǎn)義:轉(zhuǎn)成原字符串

經(jīng)過 repr 處理過或者 取消轉(zhuǎn)義過的字符串,有沒有辦法再回退出去,變成原先的有轉(zhuǎn)義的字符串呢?

答案是:有。

如果你使用 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'
 >> >

什么?還要區(qū)分 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,但無論如何 ,他們都取消了轉(zhuǎn)義。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鍵盤
    +關(guān)注

    關(guān)注

    4

    文章

    859

    瀏覽量

    39896
  • ASCII
    +關(guān)注

    關(guān)注

    5

    文章

    172

    瀏覽量

    35220
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    585

    瀏覽量

    20613
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85084
收藏 人收藏

    評論

    相關(guān)推薦

    淺析漸近表示和二分

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

    Python 轉(zhuǎn)義字符的5表示方法

    ('hello\U0000000Aworld')helloworld好啦,目前我們掌握了轉(zhuǎn)義表示。總結(jié)一下:\ 開頭并接三位 0-7
    發(fā)表于 04-11 15:18

    數(shù)據(jù)處理轉(zhuǎn)義序列的登記規(guī)程 GB 12054-1989

    數(shù)據(jù)處理轉(zhuǎn)義序列的登記規(guī)程 GB 12054-1989 本標(biāo)準(zhǔn)適用于GB2311中所規(guī)定的轉(zhuǎn)義序列的登記,但不包括該標(biāo)準(zhǔn)中說明用于表示單個增補控制功能的部分轉(zhuǎn)義序列ESC Fs
    發(fā)表于 04-29 16:40 ?11次下載

    c語言中的轉(zhuǎn)義字符

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

    Python轉(zhuǎn)義字符使用總結(jié)資料免費下載

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

    Python略高級特征的使用方法

    Python 多好用不用多說,大家看看自己用的語言就知道了。但是 Python 隱藏的高級功能你都 get 了嗎?本文中,作者列舉了 Python
    的頭像 發(fā)表于 04-24 10:12 ?3246次閱讀

    Python字符的實例詳細(xì)說明

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

    python的re模塊詳細(xì)資料總結(jié)

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

    加快運行Python速度的技巧

    我們都知道就速度而言,Python是比Java或C慢得多的語言。Python是動態(tài)類型化的語言,這意味著它的變量類型未預(yù)定義。動態(tài)類型是一把雙刃劍,它成就了Python成為一優(yōu)雅的語
    的頭像 發(fā)表于 01-04 17:14 ?3925次閱讀

    Python轉(zhuǎn)義字符的表示方法

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

    Python實現(xiàn)所有算法-基本牛頓

    Python實現(xiàn)所有算法-二分 Python實現(xiàn)所有算法-力系統(tǒng)是否靜態(tài)平衡 Python實現(xiàn)所有算法-力系統(tǒng)是否靜態(tài)平衡(補篇) Python
    的頭像 發(fā)表于 07-13 10:40 ?1690次閱讀

    轉(zhuǎn)義字符\n

    三引號能夠?qū)崿F(xiàn)換行功能;在Python中,像 \n 這樣的字符我們稱為轉(zhuǎn)義字符;
    的頭像 發(fā)表于 02-23 14:49 ?1592次閱讀
    <b class='flag-5'>轉(zhuǎn)義</b>字符\n

    python字符串編寫有哪些方法

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

    貼片電阻功率和尺寸的10封裝表示

    貼片電阻10封裝表示以及對應(yīng)功率我們在工作的時候,經(jīng)常會把貼片電阻這些型號尺寸弄錯,我們?yōu)榱俗尶蛻舾涌焖俦憬莸牟樵?。為此我們將貼片電阻封裝英制和公制的關(guān)系及詳細(xì)的尺寸和對應(yīng)功率制定成表格以便查詢。
    發(fā)表于 08-08 14:29 ?2877次閱讀
    貼片電阻功率和尺寸的10<b class='flag-5'>種</b>封裝<b class='flag-5'>表示</b><b class='flag-5'>法</b>

    python如何換行而不運行代碼

    和可讀性。 在Python中,可以使用兩個主要的方法進(jìn)行換行:使用反斜杠()和使用圓括號(())。 第一方式是使用反斜杠()來表示換行。在Python中,反斜杠是一個
    的頭像 發(fā)表于 11-24 09:50 ?3275次閱讀