python - 在 Python 脚本中有 "header"注释是否是 Pythonic

标签 python coding-style pep8

我有一个关于 Python 脚本中 block 注释的问题想问 Python 社区。我通读了 PEP-8,虽然很多想法和标准对于开发一个干净的模块或包很有意义,但我没有看到太多关于简短的 Python 脚本。

我的意思是,假设我决定制作一个非常快速的 Python 可执行脚本,作为命令行实用程序来运行我的模块中的业务逻辑。

在这个命令行实用程序中,很大一部分只是设置一个带有长文档字符串的 argparse 解析器,然后是脚本的入口点,以及沿途的一些辅助函数。

我的创作风格是这样的:

############################################################
# Helper functions
############################################################

def helper1(arg):
    pass # things happen

def helper2():
    pass

...

############################################################
# Setup Argparse
############################################################

parser = argparse.ArgumentParser(description='Some description')

somedoc = """
Some long description for my first argument...
""".strip()

parser.add_argument('integers', 
    metavar='N', 
    type=int, 
    nargs='+',
    help=somedoc)

parser.add_argument('otherargs', 
    metavar='N', 
    type=int, 
    nargs='+',
    help='Some docstring')

...

############################################################
# Entry point
############################################################

if __name__ == '__main__':
    args = parser.parse_args()

    if len(args.integers) > 1:
        helper1(args.integers)

...

尽管 PEP-8 没有涵盖这一点,但我发现它的可读性很强(假设我的变量名更好), block 注释确实有助于快速找出所有内容的位置。此外,由于这最终成为与我的应用程序打包在一起的可执行脚本,因此将它保存在一个文件中是有意义的,因为它实际上是一个美化的参数解析器。

是否有更 Pythonic 的方法来解决这个问题?

最佳答案

我认为共识是:不。

最好将模块拆分成一个包:

- package_name
 ∟ __init__.py
 ∟ __main__.py
 ∟ args.py
 ∟ helpers.py

注意:您可能想给“帮助者”起一个更具描述性的名称(如您所说)。

这是首选的一些原因:

  • 标题注释可能会过时(在错误的部分插入函数)。
  • 函数/类名更适合描述事物的作用,例如如果它被称为 parser 并使用 argparse 它显然与参数解析有关;标题注释添加了什么?? (我一定已经阅读了源代码:此 header 注释没有任何值(value)。)
  • 添加新功能时,您必须考虑将其放入哪个文件,而不是将其转储到任何地方...
  • 将业务逻辑与参数解析分开,在单独的文件中鼓励这样做。还将不同的功能系列分开。
  • 同样,测试更容易,您应该测试单独的关注点和枚举抽象。
  • 您可以记录每个文件,这样任何使用您的包的人都可以看到它的结构/它是如何工作的......而不必阅读整个文件。
  • 项目总是会变得越来越大,如果放在一个文件中会变得一团糟。
  • 调试会稍微容易一些(也许我现在正 catch )。
  • Python 已经用包(和__main__.py)解决了这个问题,不要重新发明轮子。

也就是说:

it makes sense to keep it in one file since all it really is, is a glorified argument parser.

关于快速编写脚本并将其发布的争论总是存在的。

如果您想要一些更易于长期维护、可读性强且...pythonic 的东西。考虑将其放在目录/包中。

传送单个文件,使用适当的构建工具(如 pex)可能会更好.看这个talk .

关于python - 在 Python 脚本中有 "header"注释是否是 Pythonic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259939/

相关文章:

python - 创建和合并多个数据集不适合内存,使用 Dask?

python - django-admin makemessages : how does it work with txt, xml 和其他文件?

python从低级类访问高级变量

ruby - 如何写一个复杂的条件

javascript - 如何使 jquery 之类的函数工作?

c++ - 多个返回语句或 "goto end;"

python - 我想从列表创建一个数组,但保留 NaN 和 infs

python - 在测试和核心之间共享模块 - 适当的项目结构

python - 使用 formatprg=autopep8 时如何设置正确的缩进?

python - 这个全局类变量如何兼容 pep8 并且仍然有效?