И x+=1
, и pass
- операторы, но lambda
- это выражение, и вы не можете помещать операторы в выражение.
Но это нормально.
lambda
и def
оба просто создают функцию одинаково, но lambda
более ограничен.
Если вам нужно создать функцию в середине выражения, вы должны использовать lambda
, но здесь это не так, поскольку вы создаете ее просто для использования в операторе присваивания.
Если для функции нет хорошего имени, вы можете использовать lambda
, но здесь это не так, потому что вы сразу даете ей имя.
Некоторые люди (в основном те, кто провел слишком много времени с функциональными языками семейства Lisp или ML) также любят использовать lambda
, чтобы дать понять, что они пишут «чистую функцию», которая имеет не имеет побочных эффектов и возвращает значение, которое зависит только от значения его параметров. Но и здесь это не так. (Если вы измените его на lambda x, arrival_time: x+1 if 0 < arrival_time else x
, это будет хороший пример чистой функции. Затем вы вызовете его с помощью, например, x = count_late(x)
.)
Итак, нет абсолютно никакой причины использовать lambda
здесь, во-первых. Просто используйте def
:
def count_late(x, arrival_time):
if 0 < arrival_time:
x += 1
Тем не менее, стоит отметить, что, хотя сейчас это правильный синтаксис, он не принесет никакой пользы.
Числа неизменны; нет способа изменить число 2
на число 3
, потому что это сломало бы всю физику. Когда вы пишете x += 1
, это просто превращает локальную переменную x
в имя для номера 3
вместо имени для номера 2
. Если вы называете это с помощью count_late(spam, 5)
, это не изменит того, что означает spam
, точно так же, как если бы вы назвали это с помощью count_late(2*3, 5)
, это не изменит того, что означает 2*3
.
Итак, вы, вероятно, хотели:
- Сделайте эту функцию чистой, значение которой
return
(как упоминалось выше, это будет означать, что вы могли бы использовать lambda
, и некоторые люди были бы довольны этим, но я все равно определенно предпочитаю def
здесь) или
- Сделать это методом некоторого объекта, который имеет
self.x
или
- Сделать
x
глобальным.