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')。抱歉,我不想抱怨。只是注意到了。我不认为这是抱怨。:-)