python - 实际使用 Radon 来处理 Python 的复杂性(在 Python 中)
问题描述
我有一个项目需要对 python 应用程序进行一些分析。
我想使用包'Radon'来查看一些python代码(作为字符串)并得到一个表示代码复杂性的数字。在文档中,有这个例子:
>>> from radon.visitors import ComplexityVisitor
>>> v = ComplexityVisitor.from_code('''
def factorial(n):
if n < 2: return 1
return n * factorial(n - 1)
def foo(bar):
return sum(i for i in range(bar ** 2) if bar % i)
''')
>>> v.functions
[Function(name='factorial', lineno=2, col_offset=0, endline=4, is_method=False,
classname=None, closures=[], complexity=2),
Function(name='foo', lineno=6, col_offset=0, endline=7, is_method=False, classname=None,
closures=[], complexity=3)]
好的,所以这给出了这两个函数的列表,并为这两个函数返回了一堆指标。我想只输入一些代码,并获得一切的复杂性。这个视图是通过访问给出的v.functions
,所以我想我应该能够调用v.complexity
:
v = ComplexityVisitor.from_code('''
def factorial(n):
if n < 2: return 1
return n * factorial(n - 1)
def foo(bar):
return sum(i for i in range(bar ** 2) if bar % i)
''')
print(v.complexity)
但是当我运行它时,我得到的复杂度为 1?这真的很奇怪,之前函数的复杂度是2和3,现在累积的复杂度怎么会是1呢?
无论我输入哪个代码,它都保持为 1。例如,此代码的复杂度也为 1:
def complexcode(x):
n = order(x)
temp = x
sum1 = 0
tmp = [1,2,3,4,5,6,3,1,3,5]
while (temp != 0):
for i in tmp:
if i == 10:
return
print(i)
r = temp % 10
sum1 = sum1 + power(r, n)
temp = temp // 10
# If condition satisfies
return (sum1 == x)
如何获得整个代码块的复杂性?
编辑:
我现在玩得更多,发现问题在于函数和驱动程序代码的复杂性是分开计算的。但问题几乎仍然存在。如何获得所有代码的复杂性?不是单独的功能和驱动代码分开吗?
解决方案
推荐阅读
- node.js - ffmpeg:实例中视频未开始流式传输
- c++ - 在两个重复字符之间递归插入“22”
- c - arm-gcc-8.2.0 不知道怎么解决无返回值问题
- android - 尝试从 Firebase 获取纬度和经度数据
- java - 当 target == list[mid] 时,二分搜索在 while 循环的第一次迭代中不返回 true
- flutter - 如何在 Flutter 中使屏幕可滚动?
- avaudiosession - AVSpeechSynthesizer 忽略 iOS 13 上的静音开关
- r - 来自 lodown 包的 SCF 数据问题
- json - 查找json数组中字符串的长度是否超过一定的限制
- excel - 在多张纸上找到发生但有一点扭曲