我最近问了一个标题为“ python find a function type”的问题,并获得了非常有帮助的答案。这是一个相关的问题。
假设我导入了我编写的* .py文件,并且这些导入导致f
是我定义的功能之一。现在,我写我的python解释器x = f
。稍后,我希望看到f
的完整定义,最好还是保留注释,只知道x
。这可能吗? python是否记得该定义是从哪个文件导入的,当然,除非能找到实际的相关定义,否则它不足以给出f
的完整定义吗?
答案 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
# 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函数不显示源)。将函数分配给新变量不会将对象隐藏在任何东西后面:您仍然可以访问原始对象。
装饰器的作用会有所不同,因为装饰器创建了一个新对象,而原始对象仅可用于装饰的对象。