Importando variables desde un objeto de espacio de nombres en Python

Digamos que tengo un argumento de espacio de nombres que parser.parse_args() llamar a parser.parse_args() , que analiza los argumentos de la línea de comandos.

¿Cómo puedo importar todas las variables de este espacio de nombres a mi espacio de nombres actual?

p.ej

 parser.add_argument('-p', '--some_parameter', default=1) args = parser.parse_args() # ... code to load all variables defined in the namespace args ... print some_parameter 

Ciertamente podría hacer:

 some_parameter = args.some_parameter 

pero si tengo una gran cantidad de parámetros, necesitaría una de esas líneas para cada parámetro.

¿Hay otra forma de importar variables desde un espacio de nombres sin tener que revisarlas una por una?

PS : from args import * no funciona.

PS2 : Soy consciente de que esta es una mala práctica, pero esto puede ayudar en algunos casos de esquina, como en el caso de creación de prototipos de código y pruebas muy rápidamente.

Actualice su espacio de nombres local con el resultado de la función vars() :

 globals().update(vars(args)) 

Esto generalmente no es una gran idea; deja esos atributos en el espacio de nombres en su lugar.

Podría crear más problemas de los que resolvió con este enfoque, especialmente si configura de forma accidental argumentos con un nombre de dest que ocultan un local o local que le interesa, como list o print o algo. ¡Diviértete cazando ese bicho!

Tim Peters ya lo dijo en su Zen de Python:

Los espacios de nombres son una gran idea, ¡hagamos más de ellos!

Probablemente la peor idea: ya que puede pasar un objeto arbitrario a parse_args() , pase el módulo __builtins__ , de modo que todos los atributos puedan ser considerados como variables locales.

 p = argparse.ArgumentParser() p.add_argument("--foo") p.parse_args( "--foo bar".split(), __builtins__) print foo 

Esto incluso “funcionará” para los parámetros cuyos destinos no son identificadores de Python válidos:

 # To use the example given by Francis Avila in his comment on Martijn Pieters' answer getattr(__builtins__, '2my-param')