繁体   English   中英

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

[英]Python's argparse: How to use keyword as argument's name

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相关。

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

print getattr(args, 'lambda')

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

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

这里的dest参数告诉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

有一种特定于argparse的方式来处理此问题。 文档中

如果您更喜欢具有类似dict的属性视图,则可以使用标准的Python习惯用法vars()

因此,您应该能够编写:

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

如果长选项名称不是参数所需的属性名称,则argparse为参数提供目标功能。

例如:

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

args = parser.parse_args()

print(args.function)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM