2

我尝试将 lambda 作为回调分配给 optparse 以处理将多个 -v 传递给应用程序的情况,这会在每次看到 -v 时增加全局变量 DEBUG 时遇到问题。

# globals
DEBUG = 0
(...)
def main():
[...]
    parser.add_option("-v",  action="callback",
        callback=lambda a,b,c,d: DEBUG += 1
        help="Verbose (-vvv for added verboseness)")

当它被执行时,结果是:

    callback=lambda a,b,c,d: DEBUG += 1
                                    ^
SyntaxError: invalid syntax

任何想法或替代(干净)建议?

4

2 回答 2

2

一个 lambda 必须是一个表达式,而像这样的赋值是一个语句。您可能必须这样做:

# globals
DEBUG = 0
(...)
def main():
[...]
    def increment(*args):
        global DEBUG
        DEBUG += 1

    parser.add_option("-v",  action="callback",
        callback=increment,
        help="Verbose (-vvv for added verboseness)")
于 2011-06-26T20:10:53.157 回答
1

你将不得不定义一个普通函数,因为赋值不能在 lambda 中发生(除非你做一些体操)。

但是,我建议 a) 升级到argparseb) 使用argparse action model。该'append'操作似乎对您特别有用。(或者更确切地说,在这种情况下,'append-const'动作。)

于 2011-06-26T20:10:03.280 回答