日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

聊一聊 Python 的換行以及轉(zhuǎn)義

來源: 責(zé)編: 時間:2023-11-02 09:08:54 309觀看
導(dǎo)讀Python 里面可以通過換行來標(biāo)識一行語句的結(jié)束,當(dāng)你在一行的末尾敲擊 Enter 鍵時,便可開始新的一行語句。name = "高老師"print(name) # 高老師這段代碼很簡單,因為 name = "高老師" 后面已經(jīng)沒有內(nèi)容了,是一個換行,那么

Python 里面可以通過換行來標(biāo)識一行語句的結(jié)束,當(dāng)你在一行的末尾敲擊 Enter 鍵時,便可開始新的一行語句。vvD28資訊網(wǎng)——每日最新資訊28at.com

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

這段代碼很簡單,因為 name = "高老師" 后面已經(jīng)沒有內(nèi)容了,是一個換行,那么就代表這個語句結(jié)束了。但是在 Python 中我們還可以指定分號,表示該語句結(jié)束了。vvD28資訊網(wǎng)——每日最新資訊28at.com

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

可以看到當(dāng)我們在 name = "高老師" 后面指定了分號之后,就代表該語句結(jié)束了。但是 Python 的語法解析并不會直接跳到下一行,而是繼續(xù)向后尋找,即便當(dāng)中出現(xiàn)了空格。vvD28資訊網(wǎng)——每日最新資訊28at.com

由于都在一行,所以解釋器會找到 print(name),然后繼續(xù)向后尋找。盡管這么做是可以的,但不推薦這種寫法,這種寫法純屬在惡作劇,當(dāng)然我們這里演示就不算了。vvD28資訊網(wǎng)——每日最新資訊28at.com

再比如 if 語句,有時候會出現(xiàn)寫在一行的情況。vvD28資訊網(wǎng)——每日最新資訊28at.com

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

如果 if 語句寫在了一行,那么語句塊的代碼就應(yīng)該只有一句,像我們這里的兩個 print 就不應(yīng)該寫在同一行。并且這兩個 print 的縮進(jìn)層級是一樣的,即:vvD28資訊網(wǎng)——每日最新資訊28at.com

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

關(guān)于 Python 中的語句,根據(jù)交互式界面的表現(xiàn)形式我們可以分為兩種:vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

我們看到當(dāng)輸入 num = 123 按下回車的時候,下一行的開始出現(xiàn)的是 >>>,這表示上一行語句已經(jīng)結(jié)束了。但是當(dāng)輸入 if num > 100: 按下回車的時候,下一行出現(xiàn)的是 ...,這表示這行語句還沒有結(jié)束。vvD28資訊網(wǎng)——每日最新資訊28at.com

像 if xx:,for xx:,while xx:,def xx():,class xx: 等等這樣帶有 : 的語句,一般是需要多行來表達(dá)的,一旦按下回車,就意味著下面肯定還有內(nèi)容,而且還會帶有縮進(jìn),在交互式界面中就會出現(xiàn) ...。而這樣的語句我們在一行中只能出現(xiàn)一次,比如:vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

這樣寫是無法通過語法檢測的,因為當(dāng)中出現(xiàn)了兩個 :,我們說這樣的語句一行只能出現(xiàn)一次。當(dāng)然肯定也不會有人這么做,所以這些知道就好。vvD28資訊網(wǎng)——每日最新資訊28at.com

說完了換行,我們再來聊一聊反斜杠。vvD28資訊網(wǎng)——每日最新資訊28at.com

如果一行代碼比較長,我們需要分開多行來寫該怎么辦呢?答案是使用反斜杠 /,反斜杠在 Python 中表示轉(zhuǎn)義。vvD28資訊網(wǎng)——每日最新資訊28at.com

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

再比如字符串:vvD28資訊網(wǎng)——每日最新資訊28at.com

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

Python 的字符串比較特別的是,不需要顯式的使用加號。如果使用了加號,像這段代碼就會先創(chuàng)建 3 個字符串,然后再拼接在一起。如果不使用加號,那么 Python 在語法解析的時候就會知道這是一個字符串,只不過分開寫了。vvD28資訊網(wǎng)——每日最新資訊28at.com

s = "這是一段很" /    "長的字符串" /    "具體有多長我也不知道"

當(dāng)然我們也可以分開寫,但是要使用 / 將換行符轉(zhuǎn)義掉。但是下面的做法則不行:vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

如果把 / 改成 + 號就不行了,這個在 Go 里面可以,但是不同語言的語法檢測不一樣。因為 + 后面沒有內(nèi)容了,直接換行語句結(jié)束,那么這是無法通過語法檢測的,所以 + 后面出現(xiàn)了紅色波浪線。vvD28資訊網(wǎng)——每日最新資訊28at.com

而且我們看到第三行字符串兩邊也出現(xiàn)了紅色波浪線,這是縮進(jìn)不對造成的,因為上面的語句已經(jīng)結(jié)束,所以這是一條單獨的語句,應(yīng)該靠左對齊。這里顯然沒有對齊,而是出現(xiàn)了縮進(jìn)。vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

這樣寫是可以的,此時就等價于"這是一段很長的字符串" + "具體有多長我也不知道"。vvD28資訊網(wǎng)——每日最新資訊28at.com

但是還有一個特殊情況,那就是出現(xiàn)了括號。vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

這樣寫也是沒有問題的,因為 Python 在檢測代碼的時候發(fā)現(xiàn)了小括號的左半部分,那么即便出現(xiàn)了換行,Python 也不會認(rèn)為語句結(jié)束了。只有當(dāng)再找到小括號的右半部分,Python 才會認(rèn)為語句結(jié)束,所以此時我們是不需要 / 的。vvD28資訊網(wǎng)——每日最新資訊28at.com

再來看幾個需要動點腦筋的:vvD28資訊網(wǎng)——每日最新資訊28at.com

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

只會打印這是一段很,因為遇到換行符語句結(jié)束了,下面兩行只是創(chuàng)建兩個字符串對象,而且還沒有賦值,因此創(chuàng)建完之后就被銷毀了。vvD28資訊網(wǎng)——每日最新資訊28at.com

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

會打印這是一段很長的字符串,因為我們手動指定了 ;,表示結(jié)束這段語句。后面出現(xiàn)的"具體有多長我也不知道"也是只創(chuàng)建了一個字符串對象,沒有賦值,創(chuàng)建完畢直接銷毀。vvD28資訊網(wǎng)——每日最新資訊28at.com

因此上面的代碼就等價于:vvD28資訊網(wǎng)——每日最新資訊28at.com

s = "這是一段很長的字符串"; "具體有多長我也不知道"# 或者等價于s = "這是一段很長的字符串""具體有多長我也不知道"

要是我們將第二行結(jié)尾的 / 給去掉,會怎么樣?vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

可以看到如果把第二行的 / 去掉了,這里又出現(xiàn)了紅色波浪線,這個問題我們上面說過了。因為第二行出現(xiàn)了 ;,那么第三行就是單獨的語句,所以應(yīng)該要靠在左邊。vvD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片vvD28資訊網(wǎng)——每日最新資訊28at.com

這樣寫是沒問題的,但第三行還是如我們之前所說,只是創(chuàng)建了一個字符串對象。vvD28資訊網(wǎng)——每日最新資訊28at.com

Python 的轉(zhuǎn)義

Python 的轉(zhuǎn)義也是一個老生常談的問題了,它是通過反斜杠來實現(xiàn)的。但 / 有兩個作用:vvD28資訊網(wǎng)——每日最新資訊28at.com

  • 和一些特定的字符組合,從而具備特殊意義(/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 組合,整體形成了換行。而 / 和 " 組合則并不是變成新的什么東西,而是使 " 失去其本來的意義。因為遇到 " 表示字符串結(jié)束了,但是前面出現(xiàn)了 /,使得 " 失去了其具有的意義,遇到下一個 " 才表示字符串結(jié)束。而中間那個 " 則是正常輸出了出來,但是 / 卻不見了,因為 / 和 組合就等于 "vvD28資訊網(wǎng)——每日最新資訊28at.com

說到這兒,再補(bǔ)充一下 Python 字符串的幾種表示方式:vvD28資訊網(wǎng)——每日最新資訊28at.com

print(hex(97), hex(98), hex(99))"""0x61 0x62 0x63"""# 在字符串中,每個字符還可以使用 /x 加兩個 16 進(jìn)制數(shù)字表示print("/x61/x62/x63")"""abc"""# 或者使用 / 加上三個 8 進(jìn)制數(shù)字表示print(oct(97), oct(98), oct(99))"""0o141 0o142 0o143"""print("/141/142/143")"""abc"""# 不過上面只能表示 ASCII 字符串,因為一個漢字占三個字節(jié)# 所以當(dāng)包含一個字節(jié)無法表示的字符時,解析就會出現(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 里面每個字符還可以使用 /u 或者 /U 來表示。vvD28資訊網(wǎng)——每日最新資訊28at.com

# /u 表示 unicode,后面跟 4 個十六進(jìn)制數(shù)表示的 unicode 碼點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,它的碼點超出了 FFFF# 此時 4 個 16 進(jìn)制數(shù)無法表示,因此需要 8 個十六進(jìn)制數(shù)print(hex(ord(" 
                

本文鏈接:http://www.www897cc.com/showinfo-26-16510-0.html聊一聊 Python 的換行以及轉(zhuǎn)義

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go etcd 的依賴問題終于解決了......

下一篇: C++使用Lambda表達(dá)式實例講解

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 德令哈市| 河津市| 浙江省| 平乐县| 嫩江县| 娄烦县| 轮台县| 南召县| 精河县| 化州市| 郯城县| 永昌县| 浦东新区| 聂拉木县| 城固县| 满洲里市| 大新县| 印江| 高青县| 汝城县| 江川县| 库车县| 莎车县| 墨脱县| 乌兰县| 江山市| 利辛县| 乌拉特中旗| 平阳县| 准格尔旗| 门头沟区| 宁晋县| 娄底市| 宜兴市| 北海市| 山阳县| 临朐县| 松潘县| 商都县| 郑州市| 宜宾市|