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

时间:2014-08-04 12:17:52

标签: python lambda argparse

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

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

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

您可能会问为什么我不使用其他名称。这是因为我想使用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!

使用--help选项调用的脚本提供:

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

因此,我希望保留lambda作为变量名称。解决方案也可能与argparse相关。

3 个答案:

答案 0 :(得分:20)

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

print getattr(args, 'lambda')

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

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

此处dest argument告诉argparse使用lambda_作为属性名称:

print args.lambda_

当然,帮助文本仍会将参数显示为--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

答案 1 :(得分:2)

有一种特定于argparse的处理方法。来自documentation

  

如果您希望拥有属性的类似dict的视图,则可以使用   标准的Python习语vars()

因此,您应该能够写下:

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

答案 2 :(得分:0)

如果长选项名称不是参数的所需属性名称,则

argparse为参数提供目标功能。

例如:

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

args = parser.parse_args()

print(args.function)