Python argparse as a function

时光总嘲笑我的痴心妄想 提交于 2019-12-13 11:48:32

问题


Is there anything inherently wrong with getting command-line arguments in this way? I mean by putting the argument parsing into its own function. Would it be considered non-Pythonic or more so?

#!/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)

回答1:


It looks good, feels good, conforms to Python Zen - so, what's the problem if you didn't see this particular code like that?

Moving a somewhat independent piece of functionality into a subroutine is essential good practice - a manifestation of separation of concerns, to be precise. It's not even about Python.




回答2:


This is fine. The only suggestion I would make is to allow get_args to take as a parameter (None by default) a list of arguments to pass to parse_args(). This makes testing easier. Also, the import statement should still go at the top of the script, not inside get_args itself.

import argparse

# ...

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


来源:https://stackoverflow.com/questions/26785952/python-argparse-as-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!