Люди обычно не делают пакеты из вещей, которые можно сделать с помощью дюжины или двух строк кода. Далее анализируется использование синтаксиса Python all и возвращается словарь, отображающий аст-узлы, во сколько раз этот узел появлялся в источнике. Примеры, показывающие количество операторов def
и class
, также находятся под ним.
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])