【问题标题】:Python argparse as a functionPython argparse 作为函数
【发布时间】:2015-01-03 08:12:43
【问题描述】:

以这种方式获取命令行参数有什么本质上的错误吗?我的意思是将参数解析放入它自己的函数中。它会被认为是非 Pythonic 还是更多?

#!/usr/bin/python

import argparse

def getArgs(argv=None):
    parser = argparse.ArgumentParser(description="calculate X to the power of Y")
    group = parser.add_mutually_exclusive_group()
    group.add_argument("-v", "--verbose", action="store_true")
    group.add_argument("-q", "--quiet", action="store_true")
    parser.add_argument("x", type=int, help="the base")
    parser.add_argument("y", type=int, help="the exponent")
    return parser.parse_args(argv)

if __name__ == "__main__":

    argvals = None             # init argv in case not testing
    argvals = '6 2 -v'.split() # example of passing test params to parser
    args = getArgs(argvals)

    answer = args.x**args.y

    if args.quiet:
        print answer
    elif args.verbose:
        print "{} to the power {} equals {}".format(args.x, args.y, answer)
    else:
        print "{}^{} == {}".format(args.x, args.y, answer)

【问题讨论】:

  • 不,没关系。
  • 您可以使用单个选项来表示详细程度,但由于您有 3 个级别,因此可能不太容易理解。
  • @ivan_pozdeev - 感谢您对详细程度的反馈。基本示例来自docs.python.org/2/howto/argparse.html#conflicting-options。真的是在询问将 argparse 块放在函数中而不是“裸”。在我看来,我的示例更像 Pythonic,但我找不到任何其他人这样做的示例。因此我的问题。

标签: python function argparse


【解决方案1】:

看起来不错,感觉不错,符合Python Zen - 那么,如果您没有看到这个特定的代码那样有什么问题?

将部分独立的功能移入子例程是基本的良好实践 - 准确地说是separation of concerns 的体现。它甚至与 Python 无关。

【讨论】:

  • 接受了这个答案,因为它证实了这一理念。谢谢,@ivan_pozdeev!
【解决方案2】:

这很好。我要提出的唯一建议是允许get_args 将参数列表作为参数(默认为None)传递给parse_args()。这使测试更容易。此外,import 语句仍应位于脚本顶部,而不是在 get_args 本身内部。

import argparse

# ...

def get_args(argv=None):
    parser = argparse.ArgumentParser(description="calculate X to the power of Y")
    # ...
    return parser.parse_args(argv)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 2018-12-09
    • 1970-01-01
    • 2021-06-24
    • 2020-08-09
    • 2019-02-18
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多