Python的argparse:如何使用关键字作为参数的名称

unn*_*eay 8 python lambda argparse

lambda 在Python中有一个关键字函数:

f = lambda x: x**2 + 2*x - 5
Run Code Online (Sandbox Code Playgroud)

如果我想将它用作变量名称怎么办?有逃脱序列还是其他方式?

你可能会问为什么我不使用其他名字.这是因为我想使用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!
Run Code Online (Sandbox Code Playgroud)

使用--help选项调用的脚本给出:

...
optional arguments
  -h, --help            show this help message and exit
  -l LAMBDA, --lambda LAMBDA
                        Defines the quantity called lambda
Run Code Online (Sandbox Code Playgroud)

因此,我想继续lambda作为变量名称.解决方案也可能是argparse相关的.

Mar*_*ers 21

您仍可以使用动态属性访问来访问该特定属性:

print getattr(args, 'lambda')
Run Code Online (Sandbox Code Playgroud)

更好的是,告诉argparse使用不同的属性名称:

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

这里的dest参数告诉argparse我们使用lambda_属性名称:

print args.lambda_
Run Code Online (Sandbox Code Playgroud)

当然,帮助文本仍将显示参数--lambda; 我metavar明确设置,否则将以dest大写形式使用(所以使用下划线):

>>> 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=<type 'float'>, 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
Run Code Online (Sandbox Code Playgroud)