我有一个关于 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 的东西。考虑将其放在目录/包中。
关于python - 在 Python 脚本中有 "header"注释是否是 Pythonic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259939/