1
JHerschel 2018-07-09 23:27:04 +08:00 2
直接打印是调用 a 对象的 __repr__() 方法,print(a) 是调用 a 对象的 __str__() 方法。
这两个方法的具体实现可以看这里啦: http://svn.python.org/projects/python/trunk/Objects/floatobject.c 搜索 " PyOS_double_to_string() "。 |
2
NobodyVe2x 2018-07-11 11:16:37 +08:00
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information. >>> a = 123456789.123456 >>> a 123456789.123456 >>> print(a) 123456789.123456 |
3
careofzm 2018-07-17 00:30:25 +08:00
这个东西尝试看了一原码
``` def __repr__(self, *args, **kwargs): # real signature unknown """ Return repr(self). """ pass ``` 根据注释我们可以看出,返回的是 repr(self) 于是我们在去找找 repr 方法 ``` def repr(obj): # real signature unknown; restored from __doc__ """ Return the canonical string representation of the object. For many object types, including most builtins, eval(repr(obj)) == obj. """ pass ``` 翻译大致是说: 返回对象的规范字符串表示形式。 对于许多对象类型,包括大多数内置函数,eval(repr(obj))== obj 所以我尝试使用 repr 和 str ``` >>> a = 123456789.123456 >>> repr(a) '123456789.123456' >>> str(a) '123456789.123' ··· 再看看控制台输出 ··· >>> a 123456789.123456 >>> print a 123456789.123 ··· 然后我们在使用 eval ··· >>> eval(repr(a)) 123456789.123456 >>> eval(str(a)) 123456789.123 ``` 这样大致上可以断定控制台上 普通显示: a 相当于 eval(repr(a)) print a 相当于 eval(str(a)) |