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

(19)python复杂度计算:在线AI(时间复杂)和本地工具(圈复杂度)

一、在线AI——TimeComplexity

官网:TimeComplexity.ai

简单易用的一个网站,输入代码片段后,AI会自动进行分析

在这里插入图片描述

二、本地工具

本地工具将介绍Github项目cyclopy,以及python本地库,后续如果应用到,还会介绍更多的工具

1、圈复杂度

圈复杂度(Cyclomatic Complexity)(维基百科)是一种代码复杂度的衡量标准。它可以用来衡量个模块判定结构的复杂程度,数量上表现为独立线性路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。它根据程序从开始到结束的线性独立路径的数量计算得来。
在这里插入图片描述

2、Github项目:cyclopy

(1)安装和配置

Github项目:https://github.com/Split174/cyclopy

下载后解压到自己的路径,进入项目目录,修改 ..\cyclopy-master\cyclopy\cc.py,在py文件的末尾添加主函数入口

if __name__ == "__main__":main()

(2)运行

终端在 cyclopy-master 目录下,运行命令

python -m cyclopy -f "path/example.py"

其中 path/example.py代表需要测试圈复杂度的命令,以"./cyclopy/cc.py"中的cc.py为例

python cyclopy/cc.py -f "./cyclopy/cc.py"

在这里插入图片描述

2、lizard / McCabe / radon

本小节中的应用全是相似的,只要安装+运行即可,按照以下命令

(1)lizard

输出的是详细报告

# 安装
pip install lizard# 普通使用
python -m lizard ./cyclopy/cc.py# 限制圈复杂度,输出中会有一个只保留cyclomatic_complexity > 5的表格
python -m lizard --CCN 5 ./cyclopy/cc.py

在这里插入图片描述

(2)McCabe

和cyclopy一样,输出圈复杂度

# 安装
pip install mccabe# 运行,其中 --min 5 是指最小允许的圈复杂度,高于5的圈复杂度则输出出来
python -m mccabe --min 5 ./cyclopy/cc.py

在这里插入图片描述

(3)radon

输出输出结果将显示每个函数或方法的圈复杂度,AB表示复杂度等级,数值表示圈复杂度。数值越高,复杂度越高。

# 安装
pip install radon# 运行
python -m radon cc ./cyclopy/cc.py -s

在这里插入图片描述


参考链接:

圈复杂度和代码质量优化(附带示例代码纠正代码质量)

python圈复杂度计算工具 圈复杂度怎么计算

代码圈复杂度计算——Lizard库

如何计算python文件圈复杂度

http://www.xdnf.cn/news/18350.html

相关文章:

  • 什么是Qoder?如何下载?如何体验?Qoder和其他 AI IDE 什么区别?
  • 7.Shell脚本修炼手册---awk基础入门版
  • NewsNow搭建喂饭级教程
  • Java实战:深度解析SQL中的表与字段信息(支持子查询、连接查询)
  • 【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略
  • 今天,字节开源Seed-OSS-36B模型,512k上下文
  • OpenHarmony之 蓝牙子系统全栈剖析:从协议栈到芯片适配的端到端实践(大合集)
  • Django中的MVC和MVT模式
  • mac电脑使用(windows转Mac用户)
  • 【个人网络整理】NOIP / 省选 /NOI 知识点汇总
  • 哈希:最长连续序列
  • BGP高级特性
  • 通信工程学习:什么是Template Matching模版匹配
  • 利用 Java 爬虫获取淘宝商品评论实战指南
  • 谈谈架构的内容
  • Linux 802.11协议栈深度分析与实践指南
  • 如何在日常开发中高效使用 Copilot
  • 算法训练营day58 图论⑧ 拓扑排序精讲、dijkstra(朴素版)精讲
  • Wireshark数据包波形绘制异常
  • 【Docker】在Ubuntu22.04上安装Docker
  • 药品追溯码(溯源码)采集系统(二):门诊发药后端
  • ZeroNews构建企业级安全网络架构
  • C++高频知识点(三十四)
  • 【领码课堂】让Java数据检索更智能——Bean Searcher全景解读
  • 广东省省考备考(第八十三天8.21)——言语、判断推理(强化训练)
  • 【Protues仿真】基于AT89C52单片机的舵机和直流电机控制
  • 无人机高科技,翱翔未来新天地
  • 嵌入式接口通识知识之PWM接口
  • 算法题(187):程序自动分析
  • 告别服务器!Amazon Lambda无服务开发实战指南