![](/img/trans.png)
[英]How can I use python's argparse with a predefined argument string?
[英]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.