Python argparse作为一个函数

Jon*_*onB 5 python function argparse

以这种方式获取命令行参数有什么固有的错误吗?我的意思是将参数解析放入自己的函数中.是否会被视为非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)
Run Code Online (Sandbox Code Playgroud)

iva*_*eev 5

它看起来不错,感觉很好并且符合Python Zen-那么,如果您没有看到这样的特定代码,那又会是什么问题呢?

将有点独立的功能移入子例程是必不可少的优良作法- 确切地说,是关注点分离的体现。甚至与Python无关。


che*_*ner 5

这可以.我要做的唯一建议是允许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)
Run Code Online (Sandbox Code Playgroud)