使用python optparse和lambda作为回调的问题

时间:2011-06-26 20:06:16

标签: python syntax lambda optparse

我遇到问题是尝试将lambda作为回调分配给optparse以处理将多个-v传递给app的情况,每次看到-v时都应增加全局变量DEBUG。 / p>

# 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

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

2 个答案:

答案 0 :(得分: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)")

答案 1 :(得分:1)

你将不得不定义一个正常的函数,因为在lambda中不能进行赋值(除非你做一些体操)。

但是,我建议a)使用argparse action model升级到argparse和b)。 'append'动作似乎对您特别有用。 (或者在这种情况下,'append-const'动作。)