代码之家  ›  专栏  ›  技术社区  ›  Sandu Ursu

查看从函数内调用的所有函数的代码

  •  0
  • Sandu Ursu  · 技术社区  · 5 年前

    执行以下功能:

    def alpha(a):
        return a**2
    
    def beta(a):
        return alpha(a)+1
    

    查看的源代码 beta 我们可以执行的功能:

    import inspect
    inspect.getsource(beta)
    

    提问 :

    如何查看的源代码 贝塔 , alpha 以及从调用的所有函数 贝塔 如果我只知道我的函数名 贝塔 ?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Fubar    5 年前

    所以…回到你最初的帖子,把函数直接放进解释器中。然后:

    for a in beta.__globals__:
       if callable(beta.__globals__[a]):
          print(a)
    

    请注意,全局变量前后都有双下划线。 这将为您提供一个可由beta调用的函数列表。这个 装载机 显示的函数不是用户定义的,所以您可以忽略它(可能是任何以双下划线开头和结尾的函数)。

        2
  •  0
  •   Fubar    5 年前

    将这两个模块保存到.py文件中(以test.py为例)。 现在打开一个交互式python会话:

    python3
    Python 3.6.9 (default, Sep 11 2019, 16:40:19)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import test
    >>> import inspect
    >>> print (inspect.getsource(test.beta))
    def beta(a):
        return alpha(a)+1
    
    >>> print (inspect.getsource(test.alpha))
    def alpha(a):
        return a**2
    

    如果你启动python,然后键入函数,那么它就不起作用了,因为inspect需要获得函数来源的源代码。没有源代码的可用项已经编译成字节码,因此不会为您提供任何可读的内容。