在 Python 中解析参数的最佳做法是什么?

What is the best practice for parsing arguments in Python?

由于我在 Python 方面经验不多,所以我一直在尝试遵循 Google Python Style Guide。该指南包含以下句子。

"Even a file meant to be used as a script should be importable and a mere import should not have the side effect of executing the script's main functionality."

因此,我搜索了一种覆盖__getattr__的方法,并一直使用this ArrtDict class进行参数解析,如下所示。

import argparse

class AttrDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self

def parse_args(args):
    if isinstance(args, list):
        parser = argparse.ArgumentParser()
        parser.add_argument('--args1')
        return parser.parse_args(args)
    else:
        return AttrDict(args)

def main(args):
    args = parse_args(args)

if __name__ == '__main__':
    import sys
    main(sys.argv[1:])

在 Python 中解析参数的最佳做法是什么?

你所指的句子是说你的脚本文件中应该有这一行:

if __name__ == '__main__':

并且 运行 脚本中的任何代码都应出现在该块中。通过这样做,您可以确保当您从另一个文件导入代码时,代码不会自动 运行,因为导入会忽略上面提到的 if 语句。

对于处理参数(它应该存在于上面提到的 if 块中,因为您不想在导入时这样做),您应该对 Python 2.7 之后的所有内容使用 argparse。这是文档的 link:

Python argparse library

您不必覆盖 __getattr__