成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
首先定義一個變量a,它的值為字符串test。現在,當你在命令行交互環境直接輸入變量名再回車的時候,你看到的是'test',當你輸入print(a)的時候,你看到的卻是test。

[[430121]]

如果你經常使用Python的命令行交互環境,你一定遇到過下面這個現象:

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

首先定義一個變量a,它的值為字符串test。現在,當你在命令行交互環境直接輸入變量名再回車的時候,你看到的是'test',當你輸入print(a)的時候,你看到的卻是test。

直接輸入變量名回車,字符串會被單引號包起來。而使用print函數打印變量,字符串又沒有引號。

如果說引號只是一個小問題的話,再來看看反斜杠會怎么樣:

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

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

當我輸入變量名,然后回車時,看到的結果是'D:\\game\\pal4',不僅有最外層的引號,而且反斜杠全部變成了兩根。

但是當我使用print函數打印出來的時候,一切又正常了。

覺得很詭異嗎?

實際上,輸入變量名,回車以后,你看到的才是這個字符串真正的樣子,因為在Python里面是不存在單根反斜杠的。當你要表示反斜杠本身的時候,就應該是\\這種寫法。

當然在定義的時候你可以只寫單根反斜杠,在大多數情況下,Python會理解你的意圖,所以它會自動把單根反斜杠轉換為兩個反斜杠。

而使用print關鍵字打印出來的,是經過Python優化,更便于人類閱讀的樣子。

當然,使用print函數也能看到字符串真正的樣子,不過需要修改一下:

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

當你使用repr函數先處理字符串,再打印時,它的效果就和直接輸入變量名回車是一樣的了。

在Python中,repr(對象)本質上是調用了對象的__repr__這個方法。而如果直接print(對象),實際上是打印了對象__str__方法返回的內容。我們來做一個實驗:

  1. class Test:  
  2.     def __repr__(self):  
  3.         return 'hello world!'  
  4.     def __str__(self):  
  5.         return '為什么我總是對你說你好,因為你是我的世界啊,傻瓜'  
  6. you = Test()  

動手測試一下,輸入you然后直接回車顯示的是什么內容。輸入print(you)顯示的又是什么內容。

運行效果如下圖所示:

從上面的例子可以看出,直接輸入變量名回車和直接用print函數打印調用的是對象的不同方法。所以他們當然可以不一樣。

回到昨天的問題上來。在PyCharm的調試模式中,你看到的內容實際上是變量對象的__repr__方法返回的內容,這里的內容是字符串在Python里面的真正的樣子,所以斜杠會變多。

上面說到,當你輸入Windows路徑的時候,大多數情況下,Python能夠理解你的意圖,把單根反斜杠轉成雙反斜杠。不過也有例外的情況,例如:假設有一個文件夾的名字叫做u6211。它在pal4文件夾里面。那么,路徑應該是:D:\game\pal4\u6211 如果在Python里面執行,會出現什么問題?

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

怎么和前面的pal4拼在一起了?因為\u6211是一個Unicode編碼,表示中文我。

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

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

在定義變量的時候,字符串左側引號的左邊加上字母r:

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

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2022-11-06 21:04:49

字符串字段參數

2022-06-20 19:37:59

Python字符串HTML

2024-05-29 00:00:01

字符串Python縮進

2012-03-07 17:24:10

戴爾咨詢

2012-12-20 10:17:32

IT運維

2021-03-18 23:28:45

Python反斜杠字符串

2021-05-08 19:33:51

移除字符零寬

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2010-01-05 10:40:07

.NET Framew

2025-06-13 01:15:00

正則表達式大模型

2021-10-15 21:08:31

PandasExcel對象

2022-06-28 09:31:44

LinuxmacOS系統

2024-11-13 09:18:09

2021-04-05 14:47:55

Python多線程事件監控

2022-03-12 20:38:14

網頁Python測試

2025-05-28 03:15:00

Scrapy數據sleep

2021-04-12 21:19:01

PythonMakefile項目

2021-07-08 21:49:13

前端后端Cookies

2021-05-10 19:07:18

冗余代碼Python

2021-02-14 22:22:18

格式圖片 HTTP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干 夜夜操 | 一级毛片黄片 | 一区二区三区视频在线 | 91精品在线播放 | 亚洲一区二区黄 | 成人在线视频免费观看 | 日韩三 | 午夜视频一区二区三区 | 成人一区二| 中国一级特黄毛片大片 | 免费激情网站 | 日韩精品无码一区二区三区 | 日韩精品久久久久久 | 天天爽综合网 | 久久网日本 | 在线视频 欧美日韩 | 激情一区二区三区 | 亚洲国产自产 | 一本一道久久a久久精品蜜桃 | 久久亚 | 久久午夜视频 | 日韩影院一区 | 欧美日韩网站 | 91精品国产色综合久久 | 久久99视频这里只有精品 | 日韩欧美手机在线 | 成人在线免费 | 欧美一区二区免费 | 在线精品一区二区 | 51ⅴ精品国产91久久久久久 | 北条麻妃一区二区三区在线观看 | 欧美国产日韩一区二区三区 | 久久国产精品久久国产精品 | 黄色国产在线视频 | 国产精品亚洲第一区在线暖暖韩国 | 午夜精品一区二区三区在线观看 | 日本精品一区二区三区在线观看 | 国产精品一级 | 久久久女女女女999久久 | 久久蜜桃资源一区二区老牛 | 国产精品免费一区二区 |