python从函数名称中查看完整的定义

时间:2019-01-03 15:02:20

标签: python python-3.x python-import

我最近问了一个标题为“ python find a function type”的问题,并获得了非常有帮助的答案。这是一个相关的问题。

假设我导入了我编写的* .py文件,并且这些导入导致f是我定义的功能之一。现在,我写我的python解释器x = f。稍后,我希望看到f的完整定义,最好还是保留注释,只知道x。这可能吗? python是否记得该定义是从哪个文件导入的,当然,除非能找到实际的相关定义,否则它不足以给出f的完整定义吗?

2 个答案:

答案 0 :(得分:4)

如果您将help(object)别名为您评论的某些功能,内置的k将为您提供正确的文档-与inspect.getsource(k)相同-他们知道此时您的变量名别名为k

请参阅:


示例:

# reusing this code - created it for some other question today

class well_documented_example_class(object):
    """Totally well documented class"""

    def parse(self, message):
        """This method does coool things with your 'message'

        'message' : a string with text in it to be parsed"""
        self.data = [x.strip() for x in message.split(' ')]
        return self.data


# alias for `parse()`:        
k = well_documented_example_class.parse
help(k)

打印:

Help on function parse in module __main__:

parse(self, message)
    This method does coool things with your 'message'

    'message' : a string with text in it to be parsed

inspect.getsource(k)也一样:

# from https://stackoverflow.com/a/52333691/7505395
import inspect
print(inspect.getsource(k))

打印:

def parse(self, message):
    """This method does coool things with your 'message'

    'message' : a string with text in it to be parsed"""
    self.data = [x.strip() for x in message.split(' ')]
    return self.data

答案 1 :(得分:1)

您应该考虑Python使用变量的方式。您有对象(可以是类,函数,列表,标量或其他)和变量,它们仅包含对这些对象的引用。

这说明了为什么当多个变量指向同一个可变对象时,如果通过这些变量之一对其进行更改,则所有其他变量都可见。

这是同一件事。函数对象管理其所有属性:其文档字符串,其代码和其源(如果具有:C函数不显示源)。将函数分配给新变量不会将对象隐藏在任何东西后面:您仍然可以访问原始对象。

装饰器的作用会有所不同,因为装饰器创建了一个新对象,而原始对象仅可用于装饰的对象。