python如何查看模块中的函数_如何列出Python模块中的所有函数?

本文介绍了多种在Python中查看模块内函数的方法,包括使用`dir()`、`ast`模块进行AST解析以及通过`inspect`模块。讨论了在不同场景下如何安全、完整地列出模块中的所有函数,同时提供了示例代码。
摘要由CSDN通过智能技术生成

回答(15)

2 years ago

为了完整性,我想指出有时您可能想要解析代码而不是导入代码 . import 将执行顶级表达式,这可能是个问题 .

例如,我让用户为使用zipapp制作的包选择入口点函数 . 使用 import 和 inspect 冒着运行误入代码的风险,导致崩溃,帮助打印出消息,弹出GUI对话框等等 .

相反,我使用ast模块列出所有顶级函数:

import ast

import sys

def top_level_functions(body):

return (f for f in body if isinstance(f, ast.FunctionDef))

def parse_ast(filename):

with open(filename, "rt") as file:

return ast.parse(file.read(), filename=filename)

if __name__ == "__main__":

for filename in sys.argv[1:]:

print(filename)

tree = parse_ast(filename)

for func in top_level_functions(tree.body):

print(" %s" % func.name)

将此代码放在 list.py 中并使用自身作为输入,我得到:

$ python list.py list.py

list.py

top_level_functions

parse_ast

当然,导航AST有时会很棘手,即使是像Python这样相对简单的语言,因为AST非常低级 . 但是如果你有一个简单明了的用例,它既可行又安全 .

但是,缺点是您无法检测在运行时生成的函数,如 foo = lambda x,y: x*y .

2 years ago

如果您无法导入所述Python文件而没有导入错误,这些答案都不会起作用 . 当我检查一个来自具有大量依赖关系的大型代码库的文件时,我就是这种情况 . 以下将文件作为文本处理,并搜索以“def”开头的所有方法名称并打印它们及其行号 .

import re

pattern = re.compile("def (.*)\(")

for i, line in enumerate(o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值