Python argparse como una función

¿Hay algo intrínsecamente malo en obtener los argumentos de la línea de comandos de esta manera? Me refiero a poner el argumento que analiza en su propia función. ¿Sería considerado no pythonico o más?

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

Se ve bien, se siente bien, se ajusta a Python Zen . Entonces, ¿cuál es el problema si no viste este código en particular de esa manera?

Mover una pieza de funcionalidad un tanto independiente a una subrutina es una buena práctica esencial: una manifestación de separación de preocupaciones , para ser precisos. Ni siquiera se trata de Python.

Esto esta bien. La única sugerencia que haría es permitir que get_args tome como parámetro ( None por defecto) una lista de argumentos para pasar a parse_args() . Esto facilita las pruebas. Además, la statement de import debería ir en la parte superior de la secuencia de comandos, no dentro de 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)