如何在python中获得函数的当前名称

2024-05-21 15:50:47 发布

您现在位置:Python中文网/ 问答频道 /正文

一小段代码就可以解释为什么我要问这个问题,以及为什么这不是重复的。(希望如此)

>>> def foo():
...    return 1
... 
>>> bar=foo
>>> bar.__name__
'foo'

我怎么才能得到“酒吧”?在

我试过检查和画框,但到目前为止我发现的所有东西都没有通过这次测试。在


Tags: 代码namereturnfoodefbar酒吧检查和
3条回答

如果您知道foo,那么您可以检查globals()以查看是否为该函数分配了其他函数,请注意,这将获取所有其他引用:

>>> 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']

但正如其他人所指出的,如果你想这样做,你可能会问错问题。在

bar只是对已经创建的对象(foo)的引用,执行bar=foo表示创建了对同一对象的另一个引用。在

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()

分配bar = foo之后,有两个名称都引用了完全相同的值。用Python来区分它们。Python中的赋值从不复制数据,它只是让一个名称引用一个值,而函数和其他函数一样是一个值。只有一个函数,它只有一个__name__。在

相关问题 更多 >