проблема с использованием Python Optparse и Lambda в качестве обратного вызова - PullRequest
2 голосов
/ 27 июня 2011

У меня проблема с попыткой назначить лямбду в качестве обратного вызова для optparse, чтобы обработать случай, когда множеству -v передаются в приложение, которое должно увеличивать глобальную переменную DEBUG каждый раз, когда -v виден.

# 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 ]

2 голосов
/ 27 июня 2011

Лямбда должна быть выражением, в то время как подобное присваивание является выражением. Вам, вероятно, придется сделать это так:

# 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 голос
/ 27 июня 2011

Вы должны будете определить нормальную функцию, потому что назначения не могут происходить внутри лямбды (если вы не занимаетесь гимнастикой).

Однако я бы порекомендовал а) перейти на argparse и б) с помощью модели действия argparse . Похоже, действие 'append' было бы особенно полезно для вас. (Вернее в этом случае действие 'append-const'.)

...