Argparse de Python: cómo utilizar la palabra clave como nombre del argumento

lambda tiene una función de palabra clave en Python:

 f = lambda x: x**2 + 2*x - 5 

¿Qué pasa si quiero usarlo como nombre de variable? ¿Hay una secuencia de escape o de otra manera?

Puedes preguntar por qué no uso otro nombre. Esto es porque me gustaría usar argparse :

 parser = argparse.ArgumentParser("Calculate something with a quantity commonly called lambda.") parser.add_argument("-l","--lambda",help="Defines the quantity called lambda", type=float) args = parser.parse_args() print args.lambda # syntax error! 

Script llamado con la opción --help da:

 ... optional arguments -h, --help show this help message and exit -l LAMBDA, --lambda LAMBDA Defines the quantity called lambda 

Debido a eso, me gustaría quedarme con lambda como nombre variable. Las soluciones también pueden estar relacionadas con argparse .

Puede utilizar el acceso a atributos dynamics para acceder a ese atributo específico aún:

 print getattr(args, 'lambda') 

Mejor aún, dile a argparse que use un nombre de atributo diferente:

 parser.add_argument("-l", "--lambda", help="Defines the quantity called lambda", type=float, dest='lambda_', metavar='LAMBDA') 

Aquí el argumento dest le dice a argparse que use lambda_ como nombre de atributo:

 print args.lambda_ 

El texto de ayuda todavía mostrará el argumento como --lambda , por supuesto; Establecí metavar explícitamente, ya que de otro modo usaría dest en mayúsculas (así que con el guión bajo):

 >>> import argparse >>> parser = argparse.ArgumentParser("Calculate something with a quantity commonly called lambda.") >>> parser.add_argument("-l", "--lambda", ... help="Defines the quantity called lambda", ... type=float, dest='lambda_', metavar='LAMBDA') _StoreAction(option_strings=['-l', '--lambda'], dest='lambda_', nargs=None, const=None, default=None, type=, choices=None, help='Defines the quantity called lambda', metavar='LAMBDA') >>> parser.print_help() usage: Calculate something with a quantity commonly called lambda. [-h] [-l LAMBDA] optional arguments: -h, --help show this help message and exit -l LAMBDA, --lambda LAMBDA Defines the quantity called lambda >>> args = parser.parse_args(['--lambda', '4.2']) >>> args.lambda_ 4.2 

Hay una manera específica de lidiar con esto. De la documentación :

Si prefiere tener una vista similar a un dict de los atributos, puede usar el idioma estándar de Python, vars() .

Por lo tanto, deberías poder escribir:

 print vars(args)["lambda"] # No keyword used, no syntax error. 

argparse proporciona funcionalidad de destino para los argumentos si el nombre largo de la opción no es el nombre del atributo deseado para el argumento.

Por ejemplo:

 parser = argparse.ArgumentParser() parser.add_argument("--lambda", dest="function") args = parser.parse_args() print(args.function)