2014-01-24 148 views
1

使用str.format時,當在Python 2.7.6使用str.format到輸出,如下圖所示:報價在python

>>> "| {0: ^18} | {1: ^18} |".format(1, 0.001) 

這個結果:

'|   1   |  0.001  |' 

我想知道如何抑制單輸出字符串任一端的引號。

+0

你的意思' str.format',而不是'sys.format'。 – senshin

回答

3

的引號不格式聲明的返回值的一部分,它們是從Python解釋器來了,告訴你,這是你展示一個字符串值:

momerath:~ mgregory$ python 
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> "| {0: ^18} | {1: ^18} |".format(1, 0.001) 
'|   1   |  0.001  |' 
>>> print "| {0: ^18} | {1: ^18} |".format(1, 0.001) 
|   1   |  0.001  | 
>>> a = 1 
>>> a 
1 
>>> a = "foo" 
>>> a 
'foo' 
>>> print a 
foo 
>>> 

...因此,如果您只想看到字符串的值,只需打印即可。

我不知道有一種方法要求python解釋器在報告時不要引用字符串結果。

+0

謝謝GreenAsJade。我沒有意識到結果並不是針對輸出的。 – dougc905

1

GreenAsJade有一個很好的答案(+1),但我會看看我是否可以改進它。

解釋器僅通過打印對象的__repr__來回顯REPL中的文字,如果打印的字符串應顯示對象的明確表示形式。所以要去除結束引號(因而明確對象表示),打印對象:

>>> ['foo'].__repr__() 
"['foo']" 

>>> 'foo'.__repr__() 
"'foo'" 

>>> print 'foo'.__repr__() 
'foo' 

>>> print 'foo' 
foo 
+0

不錯的觀察。要用這種想法真正地指出它,你應該展示如何對一個字符串的__repr __()進行猴子修補。這將真正回答OP的問題「我怎麼能阻止python這樣做」;)(我得到了「不能設置內置類型str的屬性」) – GreenAsJade

2

上升到GreenAsJade的挑戰,和另一企圖通過直接回答這個問題猴子打補丁的str一個子類,將回顯REPL上的str表示。

class SillyString(str): 
    def __repr__(self): 
     return self.__str__() 

實例化字符串:

>>> foo = SillyString('foo') 

而且有它迴盪在Python的外殼:

>>> foo 
foo 

與標準Python STR對比:

>>> 'foo' 
'foo' 
+0

嚴格地說,我不認爲你可以'猴子補丁「實例化的字符串是因爲它是不可變的」。實際上,你不需要修補程序實例,你可以修補修補程序類。我無法找到一個猴子補丁因爲它是_built in_。不錯的愚蠢的字符串雖然:) – GreenAsJade

+0

我想它更多的是它作爲一個內置的C實現好點,我會修改我的意見。 –