我只是想知道是否有一种方法可以把所有的代码行都写好,然后将其分配给一个变量,最后在python中打印出来?我正在尝试制定一个玩具基准,我需要计算生产力
这是一个简短的例程,用于计算任何文本文件中的行数,而不仅仅是程序模块。这非常简单——它计算所有行,包括空行和注释。连续行被视为单独的行,一行上的多个语句仅算作一行,等等。为了简单起见,我使用了 f 字符串,因此这需要 Python 3.6 或更高版本。对于其他版本的 Python,可以轻松修改打印行。
def count_lines(filename):
with open(filename) as f:
cnt = sum(1 for line in f)
print(f'There are {cnt} lines in {filename}')
如果您想查找模块中code的行数(不包括注释和空行),
ast
模块可以提供帮助。
首先仅迭代树的顶层并存储
tuple
的 (node.lineno, node.end_lineno)
。使用set
作为存储容器,避免行号重复,从而防止重复记账。
最后,计算每个 AST 节点的行数为
end - start + 1
,并对结果求和。
例如:
import ast
lines = set()
with open('project.py', 'r') as f:
module = ast.parse(f.read())
for n in module.body: # Only traverse the module's top-level.
if hasattr(n, 'lineno'):
lines.add((n.lineno, n.end_lineno))
nlines = sum(l - f + 1 for f, l in lines)
print(f'The module has {nlines} lines of code.')
注意:为了让
ast
解析模块,模块必须没有语法错误。