自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一日一技:怎么你的字符串跟我不一樣

開(kāi)發(fā) 前端
首先定義一個(gè)變量a,它的值為字符串test?,F(xiàn)在,當(dāng)你在命令行交互環(huán)境直接輸入變量名再回車(chē)的時(shí)候,你看到的是'test',當(dāng)你輸入print(a)的時(shí)候,你看到的卻是test。

[[430121]]

如果你經(jīng)常使用Python的命令行交互環(huán)境,你一定遇到過(guò)下面這個(gè)現(xiàn)象:

  1. >>> a = 'test'  
  2. >>> a  
  3. 'test'  
  4. >>> print(a)  
  5. test  

首先定義一個(gè)變量a,它的值為字符串test?,F(xiàn)在,當(dāng)你在命令行交互環(huán)境直接輸入變量名再回車(chē)的時(shí)候,你看到的是'test',當(dāng)你輸入print(a)的時(shí)候,你看到的卻是test。

直接輸入變量名回車(chē),字符串會(huì)被單引號(hào)包起來(lái)。而使用print函數(shù)打印變量,字符串又沒(méi)有引號(hào)。

如果說(shuō)引號(hào)只是一個(gè)小問(wèn)題的話,再來(lái)看看反斜杠會(huì)怎么樣:

  1. >>> b = 'D:\game\pal4'  
  2. >>> b  
  3. 'D:\\game\\pal4'  
  4. >>> print(b)  
  5. D:\game\pal4  

在這里,b變量的值為Windows下面的一個(gè)文件夾路徑。在定義的時(shí)候,我使用的是單根反斜杠。

當(dāng)我輸入變量名,然后回車(chē)時(shí),看到的結(jié)果是'D:\\game\\pal4',不僅有最外層的引號(hào),而且反斜杠全部變成了兩根。

但是當(dāng)我使用print函數(shù)打印出來(lái)的時(shí)候,一切又正常了。

覺(jué)得很詭異嗎?

實(shí)際上,輸入變量名,回車(chē)以后,你看到的才是這個(gè)字符串真正的樣子,因?yàn)樵赑ython里面是不存在單根反斜杠的。當(dāng)你要表示反斜杠本身的時(shí)候,就應(yīng)該是\\這種寫(xiě)法。

當(dāng)然在定義的時(shí)候你可以只寫(xiě)單根反斜杠,在大多數(shù)情況下,Python會(huì)理解你的意圖,所以它會(huì)自動(dòng)把單根反斜杠轉(zhuǎn)換為兩個(gè)反斜杠。

而使用print關(guān)鍵字打印出來(lái)的,是經(jīng)過(guò)Python優(yōu)化,更便于人類(lèi)閱讀的樣子。

當(dāng)然,使用print函數(shù)也能看到字符串真正的樣子,不過(guò)需要修改一下:

  1. >>> b = 'D:\game\pal4'  
  2. >>> b  
  3. 'D:\\game\\pal4'  
  4. >>> print(repr(b))  
  5. 'D:\\game\\pal4'  

當(dāng)你使用repr函數(shù)先處理字符串,再打印時(shí),它的效果就和直接輸入變量名回車(chē)是一樣的了。

在Python中,repr(對(duì)象)本質(zhì)上是調(diào)用了對(duì)象的__repr__這個(gè)方法。而如果直接print(對(duì)象),實(shí)際上是打印了對(duì)象__str__方法返回的內(nèi)容。我們來(lái)做一個(gè)實(shí)驗(yàn):

  1. class Test:  
  2.     def __repr__(self):  
  3.         return 'hello world!'  
  4.     def __str__(self):  
  5.         return '為什么我總是對(duì)你說(shuō)你好,因?yàn)槟闶俏业氖澜绨?,傻?  
  6. you = Test()  

動(dòng)手測(cè)試一下,輸入you然后直接回車(chē)顯示的是什么內(nèi)容。輸入print(you)顯示的又是什么內(nèi)容。

運(yùn)行效果如下圖所示:

從上面的例子可以看出,直接輸入變量名回車(chē)和直接用print函數(shù)打印調(diào)用的是對(duì)象的不同方法。所以他們當(dāng)然可以不一樣。

回到昨天的問(wèn)題上來(lái)。在PyCharm的調(diào)試模式中,你看到的內(nèi)容實(shí)際上是變量對(duì)象的__repr__方法返回的內(nèi)容,這里的內(nèi)容是字符串在Python里面的真正的樣子,所以斜杠會(huì)變多。

上面說(shuō)到,當(dāng)你輸入Windows路徑的時(shí)候,大多數(shù)情況下,Python能夠理解你的意圖,把單根反斜杠轉(zhuǎn)成雙反斜杠。不過(guò)也有例外的情況,例如:假設(shè)有一個(gè)文件夾的名字叫做u6211。它在pal4文件夾里面。那么,路徑應(yīng)該是:D:\game\pal4\u6211 如果在Python里面執(zhí)行,會(huì)出現(xiàn)什么問(wèn)題?

  1. >>> c = 'D:\game\pal4\u6211'  
  2. >>> c  
  3. 'D:\\game\\pal4我'  
  4. >>> print(c)  
  5. D:\game\pal4我  

怎么和前面的pal4拼在一起了?因?yàn)閈u6211是一個(gè)Unicode編碼,表示中文我。

這種情況下,你有兩種解決方式:

  • 手動(dòng)使用雙反斜杠:
  1. >>> b = 'D:\game\pal4\\u6211'  
  2. >>> b  
  3. 'D:\\game\\pal4\\u6211'  
  4. >>> print(b)  
  5. D:\game\pal4\u6211  

在定義變量的時(shí)候,字符串左側(cè)引號(hào)的左邊加上字母r:

  1. >>> b = r'D:\game\pal4\u6211'  
  2. >>> b  
  3. 'D:\\game\\pal4\\u6211'  
  4. >>> print(b)  
  5. D:\game\pal4\u6211  

本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 未聞Code
相關(guān)推薦

2022-11-06 21:04:49

字符串字段參數(shù)

2022-06-20 19:37:59

Python字符串HTML

2024-05-29 00:00:01

字符串Python縮進(jìn)

2021-03-18 23:28:45

Python反斜杠字符串

2012-03-07 17:24:10

戴爾咨詢(xún)

2012-12-20 10:17:32

IT運(yùn)維

2021-05-08 19:33:51

移除字符零寬

2021-04-27 22:15:02

Selenium瀏覽器爬蟲(chóng)

2010-01-05 10:40:07

.NET Framew

2021-10-15 21:08:31

PandasExcel對(duì)象

2021-04-05 14:47:55

Python多線程事件監(jiān)控

2024-11-13 09:18:09

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2022-03-12 20:38:14

網(wǎng)頁(yè)Python測(cè)試

2021-04-12 21:19:01

PythonMakefile項(xiàng)目

2021-07-08 21:49:13

前端后端Cookies

2023-10-28 12:14:35

爬蟲(chóng)JavaScriptObject

2021-03-12 21:19:15

Python鏈?zhǔn)?/a>調(diào)用

2024-07-30 08:16:18

Python代碼工具

2021-09-13 20:38:47

Python鏈?zhǔn)?/a>調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)