2012-11-21 88 views
0
>>> pkt = sniff(count=2,filter="tcp") 
>>> raw = pkt[1].sprintf('%Padding.load%') 
>>> raw 
"'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'" 


>>> print raw 
'\x04\x00\x00\x00\x00\x00\x00\x00g\xc4|\x00\x00\x00\x00\x00' 

生產率不同的輸出時使用打印Python爲什麼變量和返回值顯示打印變量的差值?

+2

除非逃脫反斜槓,我看不出差別。 – Makoto

+0

print raw使用'repr'並且只使用raw使用'str'函數。 –

+0

我的意思是輸出的差異不在價值本身。我認爲兩者都用於str –

回答

5

一個是字符串,其它印刷字符串的repr()表示。您可以將該表示重新粘貼到解釋器中以再次製作相同的字符串。

當回顯變量時,Python交互式提示始終使用repr()print始終使用str()字符串表示形式。

他們在其他方面是相同的。嘗試print repr(raw)比較:

>>> "'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'" 
"'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'" 
>>> print "'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'" 
'\x04\x00\x00\x00\x00\x00\x00\x00g\xc4|\x00\x00\x00\x00\x00' 
>>> print repr("'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'") 
"'\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00g\\xc4|\\x00\\x00\\x00\\x00\\x00'" 
1

__str__ and __repr__建在一個類的方法可以返回他們想要的任何字符串值。有些類將簡單地使用str()作爲repr。

class AClass(object): 

    def __str__(self): 
     return "aclass" 

    def __repr__(self): 
     return str(self) 

class AClass2(AClass): 

    def __repr__(self): 
     return "<something else>" 

In [2]: aclass = AC 
AClass AClass2 

In [2]: aclass = AClass() 

In [3]: print aclass 
aclass 

In [4]: aclass 
Out[4]: aclass 

In [5]: aclass2 = AClass2() 

In [6]: print aclass2 
aclass 

In [7]: aclass2 
Out[7]: <something else> 

In [8]: repr(aclass2) 
Out[8]: '<something else>' 

In [9]: repr(aclass) 
Out[9]: 'aclass' 

repr僅僅是爲了顯示一類的「標籤」,當您打印包含了一堆這種情況下的...它應該如何看一個列表,如。

str是如何將實例轉換成在操作中使用適當的字符串值。