获取不包括docstring的python函数源代码?

2024-09-28 20:46:05 发布

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

您可能希望docstring不影响hash,例如在joblib内存中

是否有一种剥离文档串的好方法?inspect.getsource和inspect.getdoc有点互相争斗:docstring在一个文件中被“清理”


Tags: 文件方法内存文档hashdocstringjoblibinspect
2条回答

一种方法是使用regex从源中删除docstring:

nodoc = re.sub(":\s'''.*?'''", "", source)
nodoc = re.sub(':\s""".*?"""', "", nodoc)

目前只适用于函数和类,也许有人也能找到模块的模式

如果只想散列函数体,而不考虑docstring,则可以使用function.__code__属性

它允许访问不受docstring影响的code对象

不幸的是,使用此选项,您将无法获得源代码的可读版本

def foo():
    """Prints 'foo'"""
    print('foo')


print(foo.__doc__)  # Prints 'foo'
print(foo.__code__.co_code)  # b't\x00d\x01\x83\x01\x01\x00d\x02S\x00'
foo.__doc__ += 'pouet'
print(foo.__doc__)  # Prints 'foo'pouet
print(foo.__code__.co_code)  # b't\x00d\x01\x83\x01\x01\x00d\x02S\x00'

相关问题 更多 >