2016-06-15 3 views
0

Пожалуйста, помогите мне разобраться, как это работает. Выход 4if и else in python lambda expression

a=4 
b=7 

x=lambda: a if 1 else b 
lambda x: 'big' if x > 100 else 'small' 
print(x()) 
+2

в чем вопрос? это о том, если - иначе или о выражении лямбда? –

+1

Вы должны прочитать о лямбда-функции. – GAVD

ответ

0

Ваш x всегда равен 4, так как она не принимает никаких аргументов и if 1 всегда True. Тогда у вас есть выражение лямбда, которое не привязано ни к какой переменной, ни в другом месте. Возможно, вы распечатаете x, который всегда 4, как я сказал выше.

P.S. Я настоятельно рекомендую вам прочитать Using lambda Functions от Dive into Python

0

Позвольте мне перевести это для вас.

Вы назначаете x a lambda функцию без аргументов. Поскольку 1 всегда оценивается как true, вы всегда возвращаете внешне определенную переменную a, которая оценивается как 4. Затем вы создаете лямбда-функцию с одним аргументом x, который вы не присваиваете переменной/имени доступа, поэтому Потеряно навсегда. Затем вы вызываете функцию x, которая всегда возвращает a. Выход 4.

3

Во-первых, давайте уберем эту строку, как это не делает ничего:

lambda x: 'big' if x > 100 else 'small' 

Это lambda выражение определено, но никогда не называли. Тот факт, что его аргумент также называется x, не имеет ничего общего с остальной частью кода.

Давайте посмотрим на то, что осталось:

a = 4 
b = 7 

x = lambda: a if 1 else b 

print(x()) 

Здесь x становится функцией, поскольку она содержит код. lambda форма может содержать только выражение, а не заявление, поэтому он должен использовать выражение форму if которая ретроспективный:

истинный результат, если условие еще ложного результат

В этом случае условие равно 1, что всегда верно, поэтому результатом функции x() всегда является значение a, присвоенное 4 ранее в коде. Эффективно, x() действует как:

def x(): 
    return a 

Понимание различий между выражениями и заявления является ключом к пониманию кода, как это.