Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Python 2.5 now lets you do:

 x = f(x) if a else g(y)
f() and g() aren't evaluated till they're needed.


That syntax looks like it's intended to communicate that f(x) is the normal result, and g(y) is exceptional. I wouldn't want to use it unless that's what I intended to communicate. It also looks like you would need to put parens around the "if" expression if you were to use it within a more complex expression, e.g

 2 + (f(x) if a else g(y)) + 3


And before Python 2.5, people usually used this idiom:

    x = a and f(x) or g(y)
If you know the idiom, I think this is more readable (conditional is on the left), though it has the drawback of using completely nonsensical keywords.


Another drawback I just noticed is that if f(x) returns false, you'll get g(y) even if a is true.


I don't think the keywords are nonsensical.

   (or (and a (f x))
       (g y))


Thanks, I didn't know that. That makes parenthesis optional unless you need to break precedence rules.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: