最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶大家了解python中的換行以及轉(zhuǎn)義

 更新時(shí)間:2023年11月03日 10:04:52   作者:古明地覺的編程教室  
這篇文章主要為大家詳細(xì)介紹了python中的換行以及轉(zhuǎn)義的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入了解python有一定的幫助,需要的小伙伴可以了解下

Python 里面可以通過換行來標(biāo)識(shí)一行語句的結(jié)束,當(dāng)你在一行的末尾敲擊 Enter 鍵時(shí),便可開始新的一行語句。

name = "高老師"
print(name)  # 高老師

這段代碼很簡(jiǎn)單,因?yàn)?nbsp;name = "高老師" 后面已經(jīng)沒有內(nèi)容了,是一個(gè)換行,那么就代表這個(gè)語句結(jié)束了。但是在 Python 中我們還可以指定分號(hào),表示該語句結(jié)束了。

name = "高老師"; print(name); age = 18; print(age)
"""
高老師
18
"""

可以看到當(dāng)我們?cè)?nbsp;name = "高老師" 后面指定了分號(hào)之后,就代表該語句結(jié)束了。但是 Python 的語法解析并不會(huì)直接跳到下一行,而是繼續(xù)向后尋找,即便當(dāng)中出現(xiàn)了空格。

由于都在一行,所以解釋器會(huì)找到 print(name),然后繼續(xù)向后尋找。盡管這么做是可以的,但不推薦這種寫法,這種寫法純屬在惡作劇,當(dāng)然我們這里演示就不算了。

再比如 if 語句,有時(shí)候會(huì)出現(xiàn)寫在一行的情況。

a = 123
if a > 100: print("a > 100"); print("兩個(gè) print 具有相同的縮進(jìn)")
"""
a > 100
兩個(gè) print 具有相同的縮進(jìn)
"""

如果 if 語句寫在了一行,那么語句塊的代碼就應(yīng)該只有一句,像我們這里的兩個(gè) print 就不應(yīng)該寫在同一行。并且這兩個(gè) print 的縮進(jìn)層級(jí)是一樣的,即:

a = 123

if a > 100: print("a > 100"); print("兩個(gè) print 具有相同的縮進(jìn)")
# 等價(jià)于
if a > 100:
    print("a > 100")
    print("兩個(gè) print 具有相同的縮進(jìn)")

關(guān)于 Python 中的語句,根據(jù)交互式界面的表現(xiàn)形式我們可以分為兩種:

我們看到當(dāng)輸入 num = 123 按下回車的時(shí)候,下一行的開始出現(xiàn)的是 >>>,這表示上一行語句已經(jīng)結(jié)束了。但是當(dāng)輸入 if num > 100: 按下回車的時(shí)候,下一行出現(xiàn)的是 ...,這表示這行語句還沒有結(jié)束。

像 if xx:,for xx:,while xx:,def xx():,class xx: 等等這樣帶有 : 的語句,一般是需要多行來表達(dá)的,一旦按下回車,就意味著下面肯定還有內(nèi)容,而且還會(huì)帶有縮進(jìn),在交互式界面中就會(huì)出現(xiàn) ...。而這樣的語句我們?cè)谝恍兄兄荒艹霈F(xiàn)一次,比如:

這樣寫是無法通過語法檢測(cè)的,因?yàn)楫?dāng)中出現(xiàn)了兩個(gè) :,我們說這樣的語句一行只能出現(xiàn)一次。當(dāng)然肯定也不會(huì)有人這么做,所以這些知道就好。

說完了換行,我們?cè)賮砹囊涣姆葱备堋?/strong>

如果一行代碼比較長(zhǎng),我們需要分開多行來寫該怎么辦呢?答案是使用反斜杠 \,反斜杠在 Python 中表示轉(zhuǎn)義。

a = \
    123456
# \ 表示轉(zhuǎn)義,意思就是使后面的換行符失去效果
# 這樣 Python 就不會(huì)認(rèn)為這條語句結(jié)束了
# 因?yàn)?123456 前面還有一些空格,因此等價(jià)于 a =     123456

a = \
123456
# 這行代碼就等價(jià)于 a = 123456 了

再比如字符串:

s = "這是一段很"   "長(zhǎng)的字符串"  "具體有多長(zhǎng)我也不知道"
print(s)  # 這是一段很長(zhǎng)的字符串具體有多長(zhǎng)我也不知道

Python 的字符串比較特別的是,不需要顯式的使用加號(hào)。如果使用了加號(hào),像這段代碼就會(huì)先創(chuàng)建 3 個(gè)字符串,然后再拼接在一起。如果不使用加號(hào),那么 Python 在語法解析的時(shí)候就會(huì)知道這是一個(gè)字符串,只不過分開寫了。

s = "這是一段很" \
    "長(zhǎng)的字符串" \
    "具體有多長(zhǎng)我也不知道"

當(dāng)然我們也可以分開寫,但是要使用 \ 將換行符轉(zhuǎn)義掉。但是下面的做法則不行:

如果把 \ 改成 + 號(hào)就不行了,這個(gè)在 Go 里面可以,但是不同語言的語法檢測(cè)不一樣。因?yàn)?nbsp;+ 后面沒有內(nèi)容了,直接換行語句結(jié)束,那么這是無法通過語法檢測(cè)的,所以 + 后面出現(xiàn)了紅色波浪線。

而且我們看到第三行字符串兩邊也出現(xiàn)了紅色波浪線,這是縮進(jìn)不對(duì)造成的,因?yàn)樯厦娴恼Z句已經(jīng)結(jié)束,所以這是一條單獨(dú)的語句,應(yīng)該靠左對(duì)齊。這里顯然沒有對(duì)齊,而是出現(xiàn)了縮進(jìn)。

這樣寫是可以的,此時(shí)就等價(jià)于"這是一段很長(zhǎng)的字符串" + "具體有多長(zhǎng)我也不知道"。

但是還有一個(gè)特殊情況,那就是出現(xiàn)了括號(hào)。

這樣寫也是沒有問題的,因?yàn)?Python 在檢測(cè)代碼的時(shí)候發(fā)現(xiàn)了小括號(hào)的左半部分,那么即便出現(xiàn)了換行,Python 也不會(huì)認(rèn)為語句結(jié)束了。只有當(dāng)再找到小括號(hào)的右半部分,Python 才會(huì)認(rèn)為語句結(jié)束,所以此時(shí)我們是不需要 \ 的。

再來看幾個(gè)需要?jiǎng)狱c(diǎn)腦筋的:

s = "這是一段很"
"長(zhǎng)的字符串"
"具體有多長(zhǎng)我也不知道"
print(s)
# 會(huì)打印什么呢?

只會(huì)打印這是一段很,因?yàn)橛龅綋Q行符語句結(jié)束了,下面兩行只是創(chuàng)建兩個(gè)字符串對(duì)象,而且還沒有賦值,因此創(chuàng)建完之后就被銷毀了。

s = "這是一段很" \
    "長(zhǎng)的字符串"; \
    "具體有多長(zhǎng)我也不知道"
print(s)
# 會(huì)打印什么呢?注意第二行出現(xiàn)了;

會(huì)打印這是一段很長(zhǎng)的字符串,因?yàn)槲覀兪謩?dòng)指定了 ;,表示結(jié)束這段語句。后面出現(xiàn)的"具體有多長(zhǎng)我也不知道"也是只創(chuàng)建了一個(gè)字符串對(duì)象,沒有賦值,創(chuàng)建完畢直接銷毀。

因此上面的代碼就等價(jià)于:

s = "這是一段很長(zhǎng)的字符串"; "具體有多長(zhǎng)我也不知道"

# 或者等價(jià)于

s = "這是一段很長(zhǎng)的字符串"
"具體有多長(zhǎng)我也不知道"

要是我們將第二行結(jié)尾的 \ 給去掉,會(huì)怎么樣?

可以看到如果把第二行的 \ 去掉了,這里又出現(xiàn)了紅色波浪線,這個(gè)問題我們上面說過了。因?yàn)榈诙谐霈F(xiàn)了 ;,那么第三行就是單獨(dú)的語句,所以應(yīng)該要靠在左邊。

這樣寫是沒問題的,但第三行還是如我們之前所說,只是創(chuàng)建了一個(gè)字符串對(duì)象。

Python 的轉(zhuǎn)義

Python 的轉(zhuǎn)義也是一個(gè)老生常談的問題了,它是通過反斜杠來實(shí)現(xiàn)的。但 \ 有兩個(gè)作用:

  • 和一些特定的字符組合,從而具備特殊意義(\n, \t, \r 等等)
  • 使 Python 的一些本來就具有特殊意義的字符失去其意義。
s = "my name is \nVan"
print(s)
"""
my name is 
Van
"""

s = "my name is \"Van"
print(s)
"""
my name is "Van
"""

我們看到 \ 和字符 n 組合,整體形成了換行。而 \ 和 " 組合則并不是變成新的什么東西,而是使 " 失去其本來的意義。因?yàn)橛龅?nbsp;" 表示字符串結(jié)束了,但是前面出現(xiàn)了 \,使得 " 失去了其具有的意義,遇到下一個(gè) " 才表示字符串結(jié)束。而中間那個(gè) " 則是正常輸出了出來,但是 \ 卻不見了,因?yàn)?nbsp;\ 和 組合就等于 "

說到這兒,再補(bǔ)充一下 Python 字符串的幾種表示方式:

print(hex(97), hex(98), hex(99))
"""
0x61 0x62 0x63
"""
# 在字符串中,每個(gè)字符還可以使用 \x 加兩個(gè) 16 進(jìn)制數(shù)字表示
print("\x61\x62\x63")
"""
abc
"""
# 或者使用 \ 加上三個(gè) 8 進(jìn)制數(shù)字表示
print(oct(97), oct(98), oct(99))
"""
0o141 0o142 0o143
"""
print("\141\142\143")
"""
abc
"""

# 不過上面只能表示 ASCII 字符串,因?yàn)橐粋€(gè)漢字占三個(gè)字節(jié)
# 所以當(dāng)包含一個(gè)字節(jié)無法表示的字符時(shí),解析就會(huì)出現(xiàn)亂碼
print("\xe9\xab\x98\xe8\x80\x81\xe5\xb8\x88")
"""
é??è€????
"""
print(b"\xe9\xab\x98\xe8\x80\x81\xe5\xb8\x88".decode("utf-8"))
"""
高老師
"""

當(dāng)然,在 Python 里面每個(gè)字符還可以使用 \u 或者 \U 來表示。

# \u 表示 unicode,后面跟 4 個(gè)十六進(jìn)制數(shù)表示的 unicode 碼點(diǎn)
print(hex(97), hex(98), hex(99))
"""
0x61 0x62 0x63
"""
print("\u0061 \u0062 \u0063")
"""
a b c
"""

print(ord("高"), ord("老"), ord("師"))
"""
39640 32769 24072
"""
print(hex(39640), hex(32769), hex(24072))
"""
0x9ad8 0x8001 0x5e08
"""
print("\u9ad8 \u8001 \u5e08")
"""
高 老 師
"""

# 如果是 emoji,它的碼點(diǎn)超出了 FFFF
# 此時(shí) 4 個(gè) 16 進(jìn)制數(shù)無法表示,因此需要 8 個(gè)十六進(jìn)制數(shù)
print(hex(ord("??")), hex(ord("??")))
"""
0x1f923 0x1f921
"""
# 如果是 4 個(gè)十六進(jìn)制數(shù),那么可以使用 \u 或者 \U
# 如果是 8 個(gè)十六進(jìn)制數(shù),那么只能使用 \U
print(f"\U0001f923 -> \U0001f921")
"""
?? -> ??
"""

還是蠻有趣的,Python 字符串的表示方式還挺豐富。

Python 的 r 前綴

如果字符串的開頭出現(xiàn)了 r,會(huì)是什么情況呢?

s1 = "my name is \nVan"
s2 = r"my name is \nVan"
print(s1)
"""
my name is 
Van
"""
print(s2)
"""
my name is \nVan
"""

如果是 r"" 這種形式,表示的是這個(gè)字符串是原生的,這里的 r 表示 raw。里面出現(xiàn)的任何東西都當(dāng)成普通字符串,什么 \n 啊,\t 啊,就是普通的字符串。但是我們說過,\ 具有兩個(gè)作用:

  • 和某些特殊字符組合,從而具備一些特殊意義
  • 使得某些本來就具有特殊意義的字符,失去其意義

而 r"" 這種形式,只會(huì)限制 的第一個(gè)作用,卻不會(huì)限制其第二個(gè)作用。

我們看到即使加上了前綴 r,第一行語句還是不合法的,因?yàn)?nbsp;表示字符串的邊界,即使加上了 r,對(duì)于 " 依舊是無能為力的,這時(shí)候還是需要 \ 進(jìn)行轉(zhuǎn)義。

s1 = "my name is \"Van"
s2 = r"my name is \"Van"
print(s1)
print(s2)
"""
my name is "Van
my name is \"Van
"""

然后我們又觀察到了一個(gè)奇特的現(xiàn)象,當(dāng)不加 r 的時(shí)候,\" 就表示 ",而加上了 r,\" 則表示 \",因?yàn)?r 表示原生的,\ 會(huì)原原本本的輸出出來。但我們說了,r 不會(huì)限制 \ 的第二個(gè)作用,所以 \ 不僅輸出了出來,還使得 " 失去了其原本的意義。

最后引出 Python 中一個(gè)比較讓人費(fèi)解的問題,估計(jì)已經(jīng)有人猜到了,那就是字符串結(jié)尾出現(xiàn)了 \。

兩行代碼都是不合法的。

第一行代碼不合法是因?yàn)橛疫叺?nbsp;" 表示字符串的結(jié)尾,現(xiàn)在我們使用 讓其失去了本來的意義,而后面又是空行導(dǎo)致相當(dāng)于寫了一半的語句結(jié)束了,所以不合法能夠理解。

第二行同樣不合法,因?yàn)?r 限制不了 \ 的第二個(gè)作用,也就是第二行的 \ 依舊會(huì)使得 失去其意義,導(dǎo)致同樣是寫了一半的語句強(qiáng)行結(jié)束了。因此解決辦法就是再來一個(gè) \,形成 \\

s1 = "my name is Van\\"
s2 = r"my name is Van\\"
print(s1)
print(s2)
"""
my name is Van\
my name is Van\\
"""

第二行代碼的輸出多了一個(gè) \,因?yàn)椴患?r 的話,\\ 等價(jià)于 \,因?yàn)榈谝粋€(gè) 在使第二個(gè) 失去意義的時(shí)候,其使命也就結(jié)束了,因此只會(huì)輸出一個(gè) \

但是對(duì)于有 r 前綴的字符串來說,\ 就表示普通的字符,所以是什么就輸出什么,只不過即便它是普通字符,依舊具備第二個(gè)功能。因此對(duì)于第二行有前綴 r 的字符串來說,第一個(gè) 不僅讓第二個(gè) 失去了意義,使得它不能再干擾結(jié)尾的 ",而且兩個(gè) 都會(huì)原本的輸出出來。

如果 \ 出現(xiàn)在其他位置呢?

s1 = "my nam\e is Van"
s2 = r"my nam\e is Van"
print(s1)
print(s2)
"""
my nam\e is Van
my nam\e is Van
"""

輸出是一樣的,因?yàn)?nbsp;\ 和字符 e 無法形成具有特殊意義的字符,而且 也是一個(gè)普通的字符,不具備什么特殊意義。所以對(duì)于 s1 來說,就直接把 \ 完整的輸出了,但是不推薦這種寫法。

對(duì)于 s1 來說,應(yīng)該指定兩個(gè) \\。如果就只想寫一個(gè) \ 的話,那么應(yīng)該指定前綴 r,所以 s2 是沒問題的。

以上就是一文帶大家了解python中的換行以及轉(zhuǎn)義的詳細(xì)內(nèi)容,更多關(guān)于python換行與轉(zhuǎn)義的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • pandas通過字典生成dataframe的方法步驟

    pandas通過字典生成dataframe的方法步驟

    這篇文章主要介紹了pandas通過字典生成dataframe的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python多版本管理方式(pyenv)

    python多版本管理方式(pyenv)

    pyenv是Python版本管理神器,可以解決多Python版本共存、版本沖突、環(huán)境不一致等問題,可以安裝、切換、卸載Python版本,隔離不同版本的依賴包,無需手動(dòng)配置路徑,文章詳細(xì)介紹了pyenv的安裝、使用方法及其他常用命令
    2026-04-04
  • python函數(shù)式編程學(xué)習(xí)之yield表達(dá)式形式詳解

    python函數(shù)式編程學(xué)習(xí)之yield表達(dá)式形式詳解

    這篇文章主要給大家介紹了關(guān)于python函數(shù)式編程學(xué)習(xí)之yield表達(dá)式形式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧。
    2018-03-03
  • Python魔術(shù)方法詳解

    Python魔術(shù)方法詳解

    這篇文章主要介紹了Python魔術(shù)方法詳解,本文講解了構(gòu)造和初始化、用于比較的魔術(shù)方法、數(shù)值處理的魔術(shù)方法、普通算數(shù)操作符等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • Python中的數(shù)據(jù)分析詳解

    Python中的數(shù)據(jù)分析詳解

    這篇文章主要介紹了Python中的數(shù)據(jù)分析詳解,對(duì)數(shù)據(jù)進(jìn)行分析,數(shù)據(jù)分析是指根據(jù)分析目的,用適當(dāng)?shù)慕y(tǒng)計(jì)分析方法及工具,對(duì)收集來的數(shù)據(jù)進(jìn)行處理與分析,提取有價(jià)值的信息,發(fā)揮數(shù)據(jù)的作用,需要的朋友可以參考下
    2023-07-07
  • python類參數(shù)self使用示例

    python類參數(shù)self使用示例

    python中__new__和__init__到底是怎么一回事,使用方法看下面的代碼,大家參考使用吧
    2014-02-02
  • Python安裝及建立虛擬環(huán)境的完整步驟

    Python安裝及建立虛擬環(huán)境的完整步驟

    在使用 Python 開發(fā)時(shí),建議在開發(fā)環(huán)境和生產(chǎn)環(huán)境下都使用虛擬環(huán)境來管理項(xiàng)目的依賴,下面這篇文章主要給大家介紹了關(guān)于Python安裝及建立虛擬環(huán)境的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考

    Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考

    oslo.vmware是OpenStack通用框架中的一部分,主要用于實(shí)現(xiàn)對(duì)虛擬機(jī)的管理任務(wù),借助oslo.vmware模塊我們可以管理Vmware ESXI集群環(huán)境。
    2021-06-06
  • python實(shí)現(xiàn)ID3決策樹算法

    python實(shí)現(xiàn)ID3決策樹算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)ID3決策樹算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法詳解

    Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法詳解

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法,結(jié)合實(shí)例形式詳細(xì)分析了Python實(shí)現(xiàn)二叉樹結(jié)構(gòu)的定義、遍歷方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-12-12

最新評(píng)論

太保市| 虎林市| 莆田市| 新平| 乌鲁木齐县| 神池县| 平潭县| 青阳县| 灵璧县| 突泉县| 阿巴嘎旗| 清徐县| 聂拉木县| 新郑市| 兴安盟| 双峰县| 新河县| 吉水县| 台安县| 营山县| 双江| 庆安县| 黄梅县| 容城县| 惠州市| 安平县| 闵行区| 集贤县| 鹤峰县| 鲁甸县| 留坝县| 高淳县| 平谷区| 德钦县| 成都市| 青州市| 上虞市| 富民县| 桐乡市| 吉隆县| 巫溪县|