2010-07-23 96 views
1

在此先感謝您的幫助。Python命令行「字符」返回「字符」

當在命令行輸入「example」時,Python返回'example'。我無法在網上找到任何解釋。所有的參考資料在打印命令的上下文中都與字符串對應,並且我得到了有關使用雙引號,單引號,三引號,轉義命令等的所有材料。

但是我不能找到任何解釋爲什麼在命令行中輸入雙引號引起的文本總是返回由單引號包圍的相同文本。是什麼賦予了?謝謝。

+2

道歉。我把它整理出來了。它正在評估表達。謝謝。 – Hunter 2010-07-23 04:23:51

+0

現在只需點擊答案左側的檢查來接受最佳答案。 – 2010-07-23 13:04:30

回答

1

在python中,單引號和雙引號在語義上是相同的。 起初我感到奇怪,因爲在C++和其他強類型語言中,單引號是char,雙精度是string。 只是習慣於python不關心類型的事實,所以沒有特殊的語法來標記字符串和字符。不要讓它雲霧你的偉大語言

+2

Python確實關心類型(不像Perl或PHP或Ruby或...),但它確實沒有額外的字符類型。但這不是問題 - 他只是被REPL評估輸入並顯示輸入的事實所迷惑,即使不打印。 – delnan 2010-07-23 04:38:06

0

不要混淆。 在python中單引號和雙引號是相同的。創建一個字符串對象。

6

在Python中'string' and "string" are used to represent string literals。它不像Java,其中單引號和雙引號表示編譯器的不同數據類型。

解釋器會評估您輸入的每一行並將此值顯示給您。在這兩種情況下,解釋者都在評估你輸入的內容,得到一個字符串並顯示這個值。顯示字符串的默認方式是使用單引號,因此字符串的兩次顯示都用單引號括起來。

看起來很奇怪 - 它破壞了Python的規則There should be one - and preferably only one - obvious way to do it - 但我認爲不允許其中一個選項會更糟。

您也可以使用三引號輸入一個字符串:

>>> """characters 
... and 
... newlines""" 
'characters\nand\nnewlines' 

您可以使用命令行來確認,這些是同一件事情:

>>> type("characters") 
<type 'str'> 
>>> type('characters') 
<type 'str'> 
>>> "characters" == 'characters' 
True 

解釋器使用的__repr__ method一個讓顯示器打印給你的對象。因此,在您自己的對象上,您可以確定它們在解釋器中的顯示方式。我們無法改變__repr__方法內建類型,但是我們可以自定義解釋器輸出的using sys.displayhook

>>> import sys 
>>> def customoutput(value): 
...  if isinstance(value,str): 
...  print '"%s"' % value 
...  else: 
...  sys.__displayhook__(value) 
... 
>>> sys.displayhook = customoutput 
>>> 'string' 
"string"