在python3中,如何在不知道函数名称的情况下从该函数的范围内引用一个函数?

时间:2018-09-13 04:36:19

标签: python-3.x

说我有一个功能:

def foo():
    """foo docstring"""
    print(foo.__doc__)

如何在不使用打印功能中的功能名称foo的情况下编写此代码?

请注意,我已经阅读了类似的question,该文本允许以字符串的形式访问函数的名称,但据我所知,不允许访问该函数本身。

1 个答案:

答案 0 :(得分:1)

答案比我预期的简单得多。要访问函数本身而不只是名称,请对名称应用eval()。

import inspect

def foo():
    """zxy"""
    print(fself().__doc__)

def fself():
    """returns parent function when called"""
    return eval(inspect.stack()[1][3])

def bar():
    """abcdefg"""
    print(fself().__doc__)

bar()
foo()

此代码产生:

>abcdefg
>zxy

很棒的是,我现在可以将其用作模块并在其他脚本中访问fself。