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

那曲檬骨新材料有限公司

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

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

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

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

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-01 16:13 ? 次閱讀

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

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

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

舉個(gè)例子

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

是不是有點(diǎn)神奇?變成階梯狀的輸出了。

那個(gè) ?13 又是什么意思呢?

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

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

圖片

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

圖片

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

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

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

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

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

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

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

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

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

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

圖片

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

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

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

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

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

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

>> > print("u4E2D")

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

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

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

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

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

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

Unicode 編碼其實(shí)還可以由 8 個(gè)32進(jìn)制數(shù)值組合而成,為了以前面的區(qū)分開來(lái),這里用 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)題說(shuō),轉(zhuǎn)義也可以炫技呢?

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

圖片

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

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

3. raw 字符串

當(dāng)一個(gè)字符串中具有轉(zhuǎn)義的字符時(shí),我們使用 print 打印后,正常情況下,輸出的不是我們?cè)瓉?lái)在字符串中看到的那樣子。

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

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

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

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

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

這個(gè)時(shí)候打印它,n 就是換行打印。

4. 使用 repr

對(duì)于上面那種無(wú)法使用 r 的情況,可以試一下 repr 來(lái)解決這個(gè)需求:

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

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

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

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

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

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

5. 使用 string_escape

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

那就是使用 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)過(guò) repr 處理過(guò)或者 取消轉(zhuǎn)義過(guò)的字符串,有沒有辦法再回退出去,變成原先的有轉(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 中的輸出 有一個(gè) u ,而 Python 3 的輸出沒有了 u,但無(wú)論如何 ,他們都取消了轉(zhuǎn)義。

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

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

    關(guān)注

    4

    文章

    859

    瀏覽量

    39868
  • ASCII
    +關(guān)注

    關(guān)注

    5

    文章

    172

    瀏覽量

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

    關(guān)注

    1

    文章

    585

    瀏覽量

    20603
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85039
收藏 人收藏

    評(píng)論

    相關(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)中說(shuō)明用于表示單個(gè)增補(bǔ)控制功能的部分轉(zhuǎn)義序列ESC Fs
    發(fā)表于 04-29 16:40 ?11次下載

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

    所有的ASCII碼都可以用“\”加數(shù)字(一般是8進(jìn)制數(shù)字)來(lái)表示。而C中定義了一些字母前加“\”來(lái)表示常見的那些不能顯示的ASCII字符,如\0,\t,\n等,就稱為轉(zhuǎn)義字符,因?yàn)楹竺娴淖址疾皇撬緛?lái)的ASCII字符意思了。
    發(fā)表于 11-15 14:34 ?4209次閱讀
    c語(yǔ)言中的<b class='flag-5'>轉(zhuǎn)義</b>字符

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

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

    Python略高級(jí)特征的使用方法

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

    Python字符的實(shí)例詳細(xì)說(shuō)明

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

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

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

    加快運(yùn)行Python速度的技巧

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

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

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

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

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

    轉(zhuǎn)義字符\n

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

    python字符串編寫有哪些方法

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

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

    貼片電阻10封裝表示以及對(duì)應(yīng)功率我們?cè)诠ぷ鞯臅r(shí)候,經(jīng)常會(huì)把貼片電阻這些型號(hào)尺寸弄錯(cuò),我們?yōu)榱俗尶蛻舾涌焖俦憬莸牟樵儭榇宋覀儗①N片電阻封裝英制和公制的關(guān)系及詳細(xì)的尺寸和對(duì)應(yīng)功率制定成表格以便查詢。
    發(fā)表于 08-08 14:29 ?2840次閱讀
    貼片電阻功率和尺寸的10<b class='flag-5'>種</b>封裝<b class='flag-5'>表示</b><b class='flag-5'>法</b>

    python如何換行而不運(yùn)行代碼

    和可讀性。 在Python中,可以使用兩個(gè)主要的方法進(jìn)行換行:使用反斜杠()和使用圓括號(hào)(())。 第一方式是使用反斜杠()來(lái)表示換行。在Python中,反斜杠是一個(gè)
    的頭像 發(fā)表于 11-24 09:50 ?3245次閱讀
    百家乐破解视频| 金榜百家乐的玩法技巧和规则| 大发888网页登陆| 多伦县| 百家乐官网推荐| 金冠百家乐的玩法技巧和规则| 最新博彩论坛| 月亮城百家乐官网的玩法技巧和规则| 布加迪百家乐的玩法技巧和规则| 唐人博彩| 网上百家乐有人赢过吗| 利高网上娱乐| 百家乐官网现金网最好的系统哪里有可靠吗| 宝马百家乐的玩法技巧和规则 | 属狗人做生意店铺朝向| 大发888游戏平台403| 百家乐官网单打| 北京太阳城小区| 百家乐官网网络公式| 百家乐网络赌博网址| 沙田区| 百家乐娱乐全讯网| 优博代理| 天格数16土人格24火地格数19水| 大发888游戏平台dafa888gw| 百家乐官网三路法| 大发888线上娱乐| 阳曲县| 百家乐策略大全| 百家乐官网玩法教学视频| 百家乐澳门路规则算法| 西城区| 百家乐游戏厅| 黄金城百家乐官网游戏| 新梦想百家乐的玩法技巧和规则| 百家乐官网正反投注| 足球心水论坛| 电子百家乐官网技巧| 大发888中文版下载| 百家乐官网可以作假吗| 大发娱乐城官网|