每个对象都有一个方法obj.__repr__( )
调用时,此方法返回一个字符串对象,该对象是对象的“正式”可打印表示形式obj
当Python解释器遇到
脚本中的一行print obj
或者在命令行中>>> obj,
调用对象的方法__repr__( ),并在屏幕上显示返回的代表字符串的值。
对象的repr方法可以通过使用内置函数repr( )以对象的名称作为参数来专门调用,以便将repr返回的字符串赋给标识符,从而能够对此表示执行操作。
只有在Python1和Python2中,对象名称周围的反引号与对其调用repr( )具有相同的效果。
比较:def main():
pass
if '__repr__' in dir(main):
print ('__repr__ is a method of main\n')
else:
print ('main has no method __repr__\n')
print ('main : %s\n'
'type(main) == %s\n'
% (main,type(main)) )
print ('repr(main) : %s\n'
'type(repr(main)) == %s'
%(repr(main),type(repr(main))) )
# Only in Python 1 and Python 2, string conversions with
# reversed quotes produce the same result as repr():
print ('\n`main` : %s\n'
'type(`main`) == %s'
% (`main`,type(`main`)) )
结果__repr__ is a method of main
main :
type(main) ==
repr(main) :
type(repr(main)) ==
是的。
在中,部分0x00FB2930表示对象的内存地址(这里是一个函数),即引用对象在RAM中的位置的整数。
0x00FB2930是一个hexinteger,即表示基16中的内存地址值的文本。
这个内存地址正是由内置函数id()返回的,它的值被打印为decimalinteger文本,也就是说,它以基数10表示。print ('repr(main) : %s\n'
'type(repr(main)) == %s\n'
% (repr(main),
type(repr(main))) )
hex_address = repr(main)[18:-1]
print ('hex_address = repr(main)[18:-1] defined\n'
'hex_address : %s\n'
'type(hex_address) == %s\n'
'int(hex_address , 16) : %s\n'
'type(int(hex_address , 16)) : %s\n'
% (hex_address,
type(hex_address),
int(hex_address , 16),
type(int(hex_address , 16))) )
print ('id(main) : %s\n'
'type(id(main)) == %s\n'
'hex(id(main) : %s\n'
'type(hex(id(main)) : %s'
% (id(main),
type(id(main)),
hex(id(main)),
type(hex(id(main)))) )
结果repr(main) :
type(repr(main)) ==
hex_address = repr(main)[18:-1] defined
hex_address : 0x00FB2930
type(hex_address) ==
int(hex_address , 16) : 16460080
type(int(hex_address , 16)) :
id(main) : 16460080
type(id(main)) ==
hex(id(main) : 0xfb2930
type(hex(id(main)) :