>>> def main(): pass
...
>>> foo = main
>>> def main(): pass
...
>>> foo is main
False
>>> foo
<function main at 0x1004ca500>
>>> main
<function main at 0x1005778c0>
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 : <function main at 0x00FB2930>
type(main) == <type 'function'>
repr(main) : <function main at 0x00FB2930>
type(repr(main)) == <type 'str'>
是的。
在<function main at 0x00FB2930>中,部分0x00FB2930表示对象的内存地址(这里是一个函数),即引用对象在RAM中的位置的整数。
它是函数的identity,在CPython实现中,它是内存中对象的地址。
您正在查看函数对象的默认表示形式。它为您提供了一个名称和一个惟一的id,在CPython中,它恰好是一个内存地址。
不能使用地址访问它;内存地址仅用于帮助您区分函数对象。
换句话说,如果您有两个最初命名为
main
的函数对象,您仍然可以看到它们是不同的:每个对象都有一个方法obj.__repr__( )
调用时,此方法返回一个字符串对象,该对象是对象的“正式”可打印表示形式obj
当Python解释器遇到
脚本中的一行
print obj
或者在命令行中
>>> obj
,调用对象的方法__repr__( ),并在屏幕上显示返回的代表字符串的值。
对象的repr方法可以通过使用内置函数repr( )以对象的名称作为参数来专门调用,以便将repr返回的字符串赋给标识符,从而能够对此表示执行操作。
只有在Python1和Python2中,对象名称周围的反引号与对其调用repr( )具有相同的效果。
比较:
结果
是的。
在
<function main at 0x00FB2930>
中,部分0x00FB2930
表示对象的内存地址(这里是一个函数),即引用对象在RAM中的位置的整数。0x00FB2930
是一个hexinteger,即表示基16中的内存地址值的文本。这个内存地址正是由内置函数
id()
返回的,它的值被打印为decimalinteger文本,也就是说,它以基数10表示。结果
相关问题 更多 >
编程相关推荐