2012-11-21 90 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是如何将实例转换成在操作中使用适当的字符串值。