Python: 代码统计

15 投票
3 回答
6070 浏览
提问于 2025-04-16 16:17

你知道有没有一个Python库可以生成代码的统计信息吗?我想找一个工具,能告诉我代码里有多少个类、函数、方法,还有文档注释的行数等等。

这个工具可能还会包括一些没什么用的东西,比如有多少个匿名函数或者其他奇怪的统计数据,纯粹是为了好玩。

3 个回答

0

也许 Tahar 可以帮忙,它能显示每个函数、方法、类和模块的代码行数统计。不过,由于它使用了 inspect 模块,如果被分析的模块启动了图形界面(GUI)之类的东西,可能会出现一些意想不到的情况。

我总有一天会转向使用 AST,虽然我不确定 AST 是否能提供类似于 inspect.getsourcelines() 的功能。

(编辑)

Mergou 是用 tokenize 模块重写的 tahar,目前还在测试阶段,这里有一个它运行中的视频:http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be

9

一般来说,人们不会把那些只需要十几行代码就能完成的事情做成一个包。下面的内容分析了所有的 Python 语法,并返回一个字典,这个字典将抽象语法树(ast)中的节点和它们在源代码中出现的次数进行对应。下面还有一些例子,展示了 defclass 语句出现的次数。

import collections
import os
import ast

def analyze(packagedir):
    stats = collections.defaultdict(int)
    for (dirpath, dirnames, filenames) in os.walk(packagedir):
        for filename in filenames:
            if not filename.endswith('.py'):
                continue

            filename = os.path.join(dirpath, filename)

            syntax_tree = ast.parse(open(filename).read(), filename)
            for node in ast.walk(syntax_tree):
                stats[type(node)] += 1   

    return stats

print("Number of def statements:", analyze('.')[ast.FunctionDef])
print("Number of class statements:", analyze('.')[ast.ClassDef])
4

你可以看看 Pymetrics,或者去看看其他一些工具,在这里列出来的

撰写回答