2015-07-20 3 views
2

следуя эту тему One line if-condition-assignmentОдна линии, если назначение в питоне

Есть ли способ сократить предложенное заявление там:

num1 = (20 if intvalue else 10) 

в случае, присвоенное значение является тем же самым один в состоянии?

это то, как он выглядит сейчас:

num1 = (intvalue if intvalue else 10) 

intvalue появляется дважды. Есть ли способ использовать intvalue только один раз и получить то же утверждение? что-то более элегантное?

+0

Страшно, что someBoolValue может иметь значение 10 вместо True или False. – RemcoGerlich

+0

см. Редактировать, i означает целочисленное значение – John

ответ

6

Вы можете использовать or здесь:

num1 = intvalue or 10 

orкоротких замыканий; если первое выражение истинно, это значение возвращается, в противном случае возвращается результат второго значения.

+0

Be. В самом деле. Осторожный. с короткими замыканиями. Здесь нет никаких проблем (потому что 'someBoolValue' может быть только True или False), но не забывайте, что некоторые другие объекты, такие как dict и list, считаются False при пустом. – FunkySayu

+0

@FunkySayu: да, но это же значение будет считаться ложным в условном выражении * в любом случае *. –

+0

Будет ли он работать и на струнах? 'x = string или ''' – John