当前位置: 首页 > news >正文

使用ast获取py文件中所有函数与类名

        当我们在创建python项目,经常需要遍历和分析代码文件,特别是当我们想要自动化地获取某些信息,比如所有的函数和类名。Python的ast(Abstract Syntax Trees,抽象语法树)模块为我们提供了一个强大的工具,可以方便地解析Python源代码,并从中提取出我们需要的信息。

原理

        当我们将py文件路径传递给ast模块的parse函数后,ast会将其解析为抽象语法树,然后使用ast.walk方法遍历这棵树,查找函数定义(FunctionDef节点)和类定义(ClassDef节点)。

        每当我们遇到一个这样的节点时,就可以提取出对应的函数名或类名。这种方法不仅准确,而且比使用正则表达式等字符串处理方法更加可靠,因为它直接利用了Python的语法解析能力。此外,ast模块还可以帮助我们避免因为代码格式变化或注释等无关因素而导致的解析错误,因为它只关注语法结构,而不关心具体的代码风格或注释内容。

代码

ast是python内置库,因此我们不需要使用pip命令安装。

import ast
def extract_function_and_class_names(pyfile_path):
    with open(pyfile_path, 'r', encoding='utf-8') as f:
        source=f.read()
    try:
        tree=ast.parse(source, filename=pyfile_path)
    except SyntaxError:
        print(f"语法错误!")
        return []
    names=[]
    for node in ast.walk(tree):
        if isinstance(node, ast.FunctionDef):
            names.append(node.name)
        elif isinstance(node, ast.ClassDef):
            names.append(node.name)
    return names

运行结果:

        使用上述代码对WechatAuto.py运行后:

说明 

        特别的,如果你的项目内函数或类比较多,又需要使用__all__=['函数名','类名']来限制用户在使用以下方式:

from module import *

 导入你的模块后能够使用的函数或方法,那么你便可以先使用ast模块先将你的py脚本内的函数或类全部导出,然后再使用list comprehension将不需要的部分删除掉即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/50010.html

相关文章:

  • IPOIB 驱动中的发送完成处理机制
  • 深度集成DeepSeek,智问BI@GPT引领商业智能“深度思考“革命
  • 家政预约小程序用例图分析
  • 迷你世界脚本计时器接口:MiniTimer
  • 流程设计5原则与流程执行5要点
  • 北京航空航天大学计算机复试上机真题
  • JVM基本概念及内存管理模型
  • Dockershrink 开源的 AI 助手(程序包),可减小应用程序的 Docker 镜像的大小
  • 从 ISO 到 GMT+8:Vue 前端时间格式的奇妙之旅!
  • 【Linux操作系统】VM17虚拟机安装Ubuntu22.04,图文详细记录
  • vscode工作区看不清光标
  • 14天 -- Redis 的持久化机制有哪些?Redis 主从复制的实现原理是什么? Redis 数据过期后的删除策略是什么?
  • C语言学习笔记-初阶(27)操作符详解1:位操作
  • Unity 使用NGUI制作无限滑动列表
  • win11/win10+tensorflow2.9.0+cuda11.2.1+cudnn8.1.1
  • leetcode日记(77)子集Ⅱ
  • vue3:初学 vue-router 路由配置
  • 备份docker的数据库文件信息
  • PMP项目管理—资源管理篇—1.规划资源管理
  • 【Python爬虫】爬取公共交通路网数据
  • 大语言模型 智能助手——既能生成自然语言回复,又能在必要时调用外部工具获取实时数据
  • 【零基础到精通Java合集】第二十二集:CMS收集器详解(低延迟的里程碑)
  • 将 MySQL 数据高效导入 Redis
  • JAVA安全—Shiro反序列化CB1链source入口sink执行gadget链
  • Python解决“找出整形数组中占比超过一半的数”问题
  • AI介入软件测试过程可行的环节和帮助机制
  • 科普:“图相似性”与“文本相似性”
  • 【音视频】ffmpeg命令分类查询
  • LabVIEW设备长期稳定运行程序设计要点
  • MySQL安装教程