>>> function_reference_names = [k for k, v in globals().iteritems() if hasattr(globals()[k], "func_name") and globals()[k].func_name == bar.__name__ and k != bar.__name__]
>>> function_reference_names
['bar']
In [62]: def foo():pass
In [63]: bar=foo
In [64]: spam=bar #another reference to foo function object
In [65]: spam.__name__,bar.__name__
Out[65]: ('foo', 'foo')
In [66]: spam is foo,bar is foo
Out[66]: (True, True)
In [67]: import sys
In [68]: sys.getrefcount(foo) # no of variable pointing to that object
Out[68]: 4 #3+1, 1 added by default by getrefcount()
如果您知道
foo
,那么您可以检查globals()
以查看是否为该函数分配了其他函数,请注意,这将获取所有其他引用:但正如其他人所指出的,如果你想这样做,你可能会问错问题。在
bar
只是对已经创建的对象(foo
)的引用,执行bar=foo
表示创建了对同一对象的另一个引用。在分配
bar = foo
之后,有两个名称都引用了完全相同的值。用Python来区分它们。Python中的赋值从不复制数据,它只是让一个名称引用一个值,而函数和其他函数一样是一个值。只有一个函数,它只有一个__name__
。在相关问题 更多 >
编程相关推荐