On Apr 22, 2014, at 8:01, "Lucas Malor" email@example.com wrote:
On 20 April 2014 04:17, Bruce Leban bruce-at-leapyear.org |python-ideas-at-python.org| firstname.lastname@example.org wrote:
I found that the ugliest part of your proposal since it hides the first case and at the same time makes it appear special when it isn't.
Myabe yes, but if you "translate" it in an if-elif, also the if seems to be "special".
Yes, there is a difference, but it's not nearly as dramatic as with your version. The conditions still look roughly parallel, only one short word away from the indent point, instead of the first one being way off to the right.
On Apr 22, 2014, at 8:27, "Lucas Malor" email@example.com wrote:
Sorry, I didn't read it carefully. Anyway, youe example can be written as:
for i in range(5): print(i, end=' => ') if i == 1: print('one') elif i == (2,3): print('tuple(two, three)') elif i in (2, 3): print('two or three') elif i > 3: print('more than three') else: print('unmatched')
and it's much simpler to read.
That's pretty much his point. The same can be said for all of your examples.
Your version is only "simpler" in that your "case" and "elcase" are spelled "if case" and "elif case" in his. Meanwhile, your version is more complex in that the first case is crammed on the same line with the "switch". Also, instead of automatically handling tuples in a natural and obvious way, you're forced to invent a new builtin class and a new display form just to distinguish tuples inline in a case label, and still can't easily handle the distinction in a natural and readable way. And, while his can be trivially extended to handle other types of comparison besides == and in, yours can't. So, you've come up with something that's more complex, less natural, and less powerful than what we can already do, and the only benefit is a little bit of brevity.
I suggested the switch statement for a simpler alternative to the if-elif chain.
On 22 April 2014 17:15, Chris Angelico rosuav-at-gmail.com |python-ideas-at-python.org| firstname.lastname@example.org wrote:
On Wed, Apr 23, 2014 at 1:01 AM, Lucas Malor email@example.com wrote:
for i in range(5): print(i, end=' => ') case = Case(i) if case(1): print('one') elif case((2,3)):
print('tuple(two, three)') elif case(2, 3): print('two or three') elif case > 3: print('more than three') else: print('unmatched')
Ok, but you have to nest it inside a for loop. Your class is a good solution, but a new syntax does not need nesting in a with or a for statement.
I don't think he *has* to nest it. My reading of the above is that it's the For-Case Paradigm , normally considered an anti-pattern but viable for demonstrating what happens in each case.
 http://thedailywtf.com/Articles/The_FOR-CASE_paradigm.aspx _______________________________________________ Python-ideas mailing list Pythonfirstname.lastname@example.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
Python-ideas mailing list Pythonemail@example.com https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/