首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何计算Python中不包括注释和文档字符串的代码行?

如何计算Python中不包括注释和文档字符串的代码行?
EN

Stack Overflow用户
提问于 2012-01-31 16:43:50
回答 4查看 17.2K关注 0票数 21

我希望尽可能准确地计算多文件Python项目中的代码行数,但不包括注释、文档字符串或空行。

我首先尝试使用cloc,它以Debian包的形式提供。但是cloc将大多数文档字符串视为代码-即使它们是注释。( Python:不再-最新版本的cloc现在将Python文档字符串视为注释。)

我注意到下面的一些评论说文档字符串应该包括在总数中,因为它们可能被代码用来影响运行时的行为,因此被计入程序代码/数据/配置的一部分。一个突出的例子是'ply',它要求你用文档字符串编写函数,据我回忆,文档字符串包含对程序操作至关重要的语法和正则表达式。然而,在我看来,这似乎是一个非常罕见的例外。大多数情况下,文档字符串的作用类似于注释。具体地说,我知道一个事实,即对于我想要测量的所有代码都是正确的。因此,我想将它们排除在我的行数之外。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-31 17:08:35

将Python文档字符串包括在“代码行”计数中可能是正确的。通常情况下,注释会被编译器丢弃,但文档字符串会被解析:

请参阅PEP 257 - Docstring Conventions

文档字符串是作为模块、函数、类或方法定义中的第一条语句出现的字符串文字。这样的文档字符串成为该对象的__doc__特殊属性。

..。

在Python代码中,出现在其他地方的字符串字面值也可以作为文档。它们不能被字节码编译器识别,并且不能作为运行时对象属性访问。

换句话说,文档字符串是以一种非常真实的方式编译并构成程序代码的。此外,它们通常由doctest module用于单元测试,作为命令行实用程序的使用字符串,等等。

票数 7
EN

Stack Overflow用户

发布于 2012-01-31 17:08:12

注释行可以是python中的代码行。请参见doctest示例。

此外,您将很难找到一种合理/可靠的方法来将这种情况视为注释或代码:

代码语言:javascript
复制
foo = ('spam', 
       '''eggs
          eggs
          eggs'''
       '''more spam''',
       'spam')

只需计算注释行,我想大多数程序员都会同意这是一个很好的衡量标准,无论你实际试图衡量的是什么。

票数 7
EN

Stack Overflow用户

发布于 2013-01-05 18:17:43

Tahar不计算文档字符串。下面是它的count_loc函数:

代码语言:javascript
复制
def count_loc(lines):
    nb_lines  = 0
    docstring = False
    for line in lines:
        line = line.strip()

        if line == "" \
           or line.startswith("#") \
           or docstring and not (line.startswith('"""') or line.startswith("'''"))\
           or (line.startswith("'''") and line.endswith("'''") and len(line) >3)  \
           or (line.startswith('"""') and line.endswith('"""') and len(line) >3) :
            continue

        # this is either a starting or ending docstring
        elif line.startswith('"""') or line.startswith("'''"):
            docstring = not docstring
            continue

        else:
            nb_lines += 1

    return nb_lines
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9076672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档