2017-04-11 32 views
2

在下面的代码,我不明白为什么x.__str__()str(x)产生不同的结果:如何强制str(f)产生与f .__ str __()相同的输出?

import gc 

def mystr(self): return "{:.8f}".format(self) 

underlying_dict = gc.get_referents(float.__dict__)[0] 
underlying_dict["__repr__"] = mystr 
underlying_dict["__str__"] = mystr 

# I want to see 0.12345679 
x = 0.123456789 

print 1, "{:.8f}".format(x) # works 
print 2, mystr(x)   # works 
print 3, x     # fails 
print 4, x.__str__()  # works 
print 5, x.__repr__()  # works 
print 6, str(x)    # fails 
print 7, type(x)   # just checking the type 

回答

1

我已经限制问题比较str(x)x.__str__()

在REPL(Python的2或Python 3):

>>> x = 0.123456789 
>>> print(str(x)) 
0.123456789 
>>> print(x.__str__()) 
0.123456789 

随着IPython3:

In [2]: x = 0.123456789 
    ...: ...: print(str(x)) 
    ...: ...: print(x.__str__()) 
    ...: 
0.123456789 
0.123456789 

,但我得到了同样的问题,你当我在Jupyter笔记本执行:

x = 0.123456789 
print(str(x)) 
print(x.__str__()) 

#0.123456789 
#0.12345679 

所以,这个问题似乎与Jupyter有关。但我还没有找到更多有关它呢...

+0

好吧,但正确的输出是0.12345679 –

相关问题