I've been toying with a similar idea myself. I've felt the pain described by Brian, and I share Marco's dislike for the suggested syntax. Moreover, I dislike the idea that the conditional should somehow refer to the function's default arguments.
My half-baked idea is along the lines of f(val1, val2, if cond3: val3, if cond4: arg4=val4) with the sense that if a condition is not met, the argument is just not passed; this would be equivalent to f( val1, val2, *[_ for _ in [val3] if cond3], **{'arg4': _ for _ in [val4] if cond4} ) As presented, this would work for list and set literals as well, but the syntax is not good for dict literals; "{if cond: key: value}" feels completely wrong. Alternative "{key if cond: value}" looks palatable at first glance, but doesn't feel quite "in line" with the rest of the proposal, and for my taste, looks too similar to the already valid "{key1 if cond else key2: value}". That last similarity is also why I don't like the syntax f(arg1, arg2, arg3 if cond3, arg4=cond4 if cond4) I've been thinking about alternatives such as f(arg1, if (cond2) arg2) f(arg1, (if cond2) arg2) or just marking the if as a "special if", e.g. f(arg1, arg2 if* cond2) But I'm not really pleased with any of them. Have fun, Shai. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/ZRDK3Z55MMTVZOLMYSKC32WE7DTZYNFS/ Code of Conduct: http://python.org/psf/codeofconduct/