如何在argparse中使用Python关键字作为参数名?

19 投票
3 回答
4096 浏览
提问于 2025-04-18 15:54

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 个回答

2

argparse 是一个用来处理命令行参数的工具,它可以让你为参数指定一个不同的名字,这样即使你在命令行中使用的长选项名称不是你想要的属性名称,也没关系。

举个例子:

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

args = parser.parse_args()

print(args.function)
4

有一种专门针对argparse的处理方法。来自文档的说明:

如果你更喜欢以字典的方式查看属性,可以使用标准的Python写法,vars()

所以,你应该可以这样写:

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

你可以使用动态属性访问来访问那个特定的属性:

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

撰写回答