在 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:
您不必覆盖 __getattr__
由于我在 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:
您不必覆盖 __getattr__