Python';s argparse:如何使用关键字作为参数';姓名

Python';s argparse:如何使用关键字作为参数';姓名,python,lambda,argparse,Python,Lambda,Argparse,lambda在Python中有一个关键字函数: f = lambda x: x**2 + 2*x - 5 如果我想用它作为变量名呢?是否有转义序列或其他方式 你可能会问我为什么不用另一个名字。这是因为我想使用: 使用--help选项调用的脚本提供: ... optional arguments -h, --help show this help message and exit -l LAMBDA, --lambda LAMBDA

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

f = lambda x: x**2 + 2*x - 5
如果我想用它作为变量名呢?是否有转义序列或其他方式

你可能会问我为什么不用另一个名字。这是因为我想使用:

使用
--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')
print args.lambda_
这里告诉
argparse
使用
lambda
作为属性名:

parser.add_argument("-l", "--lambda",
    help="Defines the quantity called lambda",
    type=float, dest='lambda_', metavar='LAMBDA')
print args.lambda_
当然,帮助文本仍然会将参数显示为
--lambda
;我显式地设置了
metavar
,否则它将使用大写的
dest
(下划线也是如此):

导入argparse >>>parser=argparse.ArgumentParser(“使用通常称为lambda的量计算某物”) >>>parser.add_参数(“-l”,“--lambda”, …help=“定义称为lambda的数量”, …type=float,dest='lambda',metavar='lambda') _StoreAction(选项_strings=['-l','-lambda'],dest='lambda',nargs=None,const=None,default=None,type=,choices=None,help='定义称为lambda的数量',metavar='lambda') >>>parser.print_help() 用法:用通常称为lambda的量来计算某物。 [-h][-lλ] 可选参数: -h、 --帮助显示此帮助消息并退出 -l LAMBDA,-LAMBDA LAMBDA 定义称为lambda的数量 >>>args=parser.parse_args(['--lambda',4.2']) >>>阿格斯兰姆达_ 4.2
有一种特定的处理方法。从:

如果您喜欢使用类似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)

将其命名为
Lambda
而不是
Lambda
?…或将其命名为
\u Lambda
Lambda\u
dest
解决方案不适用于位置参数。@unndreay:这是因为对于位置参数,名称是
dest
参数。使用
metavar
在帮助文本中提供要使用的字符串<代码>解析器。添加参数('lambda',metavar='lambda')。抱歉,我不想抱怨。只是注意到了。我不认为这是抱怨。:-)