Почему не работают два оператора в lambda?

import sys

defaults_commands = {
    'help': lambda: print('text'),
    'shut up':  lambda: print('\n Exiting...') sys.exit()
}

File "ToDoList.py", line 8 } ^ SyntaxError: invalid syntax

Зарание спасибо.


Ответы (2 шт):

Автор решения: CrazyElf

Вот так вроде работает. В Питоне можно через запятую команды писать. А чтобы всё в одну лямбду попало надо в скобки взять. Ну или по факту tuple тут получается, лень уже разбираться.

defaults_commands = {
    'help': lambda: print('text'),
    'shut up':  lambda: (print('\n Exiting...'), sys.exit())
}
→ Ссылка
Автор решения: Alex Breus
  • Во-первых, предполагаю, что часть кода будет ругать синтакс при котором lambda пытается использовать print
  • Во-вторых, sys.exit() следует вынести за фигурные скобки.

Предполагаю, что для задачи, которую Вы пытаетесь решить данный комментарий может быть лишним, потому предлагаю lambda-функции переопределить на обычные.

Пример:

import sys


def help_function(text):
    print(text)


def exit_function(text):
    print(text)
    sys.exit()


defaults_commands = {
    'help': help_function('text'),
    'shut up': exit_function('\n Exiting...'), 
    # Внимание! Код после вызова sys.exit() 
    # в функции exit_function работать НЕ БУДЕТ! 
    # Python завершил свою работу и дальше код НЕ ЧИТАЕТ.
    'show me': help_function('Show me please!')
}

# Внимание! Код ниже работать НЕ БУДЕТ!
print('example text')

В данном примере надо понимать, что при присвоении какой-либо функции к элементу массива defaults_commands - функции будут вызваны автоматически (то бишь сработает вызов и они отработают свой код).

По-этому Ваш скрип выполнится не полностью и завершит свою работу.

→ Ссылка