Вы не звоните своим лямбдам. Здесь вы проверяете логическое значение самого лямбда-объекта (фактически function
-объекта), что, конечно, всегда верно.
Если вы хотите проверить результат лямбды, вы должны вызвать его - и в вашем случае вам придется передать ему аргумент, поскольку вы определяете, что он принимает аргумент:
if (lambda x: True)(42):
print("yes")
if (lambda x: False)(42):
print("no")
Теперь это не имеет смысла в вашем фрагменте, так как лямбды Python ограничены одним выражением, так что вы также можете заменить целое (lambda x: whatever_expression)(whatever_value)
на whatever_expression
.
Также, как упоминает Чепнер, ваше if
состояние фактически анализируется как:
if (lambda x: True == True):
не как:
if (lambda x: True) == True:
здесь это не имеет большого значения, так как, как я объяснил вначале, здесь проверяется логическое значение самого лямбда function
объекта, но в любом случае ... Как правило, точное тестирование по True
или False
бесполезен в python - все объекты имеют логическое значение, и все выражения дают объекты, поэтому это
if some_expression == True:
совпадает с
if some_expression: