On Fri, May 25, 2018 at 12:06:42PM +0200, Jacco van Dorp wrote: > I would like to carefully suggest a half form of the ternary expression. [...] > However, this isn't PEP8 compliant
PEP 8 is not holy writ. Ignore it when your code is better for ignoring it. > I would very much like to write: > > >>> do_something if cond > > and be done with it. Like a ternary expression but without the else clause. I believe there are a number of languages out there which have clauses like this. I'm not going to do a language survey, but two popular choices are: something if condition something unless condition and similar variations. For example, Ruby: http://www.railstips.org/blog/archives/2008/12/01/unless-the-abused-ruby-conditional/ > ===Example Usecases=== > (inside loop) > >>> continue if x > 50 That's not going to work if this is an *expression*. You can't say: continue if x > 50 else "don't continue" The problem with an expression is, what does this return if the clause is false? So the comparison to the ternary if expression is invalid. This would have to be a statement. > > (logging) > >>> logger.info(f"{var}") if DEBUG > (Logging module ofc already does this, and in a much better way. > However, if var is expensive to get it could save a bit of time.) If the logging module already solves this problem in "a much better way", why are you including a much worse way? > (singleton creation) > >>> cls.inst = super().__new__(cls, *args, **kwargs) if cls.inst is None And this is a problem: that is ambiguous with the if...else ternary expression. Presumably you want that to look like a statement: cls.inst = super().__new__(cls, *args, **kwargs) guarded by an if statement: if cls.inst is None but it can also be interpreted as an assignment: cls.inst = with an incomplete ternary expression: super().__new__(cls, *args, **kwargs) if cls.inst is None else what???? Even if we decide to make it a rule that one interpretation beats the other, we still have to expect people will be confused by it. So we ought to be cautious about syntax which is ambiguous in this way. > (cache) > >>> cache.warm() if cache is None There are about a zillion things that you can write like this: if condition: do something so the use-cases certainly exist. The only question is a matter of taste and familiarity, whether it nicer to write it as above or like: do something if condition -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/