On 17 April 2014 21:31, Guido van Rossum guido-at-python.org | python-ideas-at-python.org| email@example.com wrote:
I don't want to discourage you too much, but I think that adding a switch statement comes *very* low on the list of improvements we would like to make in Python 3.5.
We should probably focus on speed (or aspects of it, like startup), language features that help porting Python 2 code to it (e.g. bytes formatting), and things that improve the user experience of getting started with Python on a new machine (e.g. pip/venv).. Or perhaps stdlib issues like an asyncio-infused variation of WSGI.
I completely agree.
I've probably missed a few focus areas, but I still very much doubt we'll be adding a switch statement -- it's a "sexy" language design issue (like anonymous functions) but that's not what will help Python compete.
Well, no, it will not be a "killer feature". But if you intend it's "sexy" because it's a syntax sugar, even if I'm not much experienced, I respectfully disagree. A switch-case statement is more DRY than an if-elif chain, in its use environment. Deltas are only quicker to code and potentially less DRY.
On 17 April 2014 23:41, Andrew Barnert abarnert-at-yahoo.com |
python-ideas-at-python.org| firstname.lastname@example.org wrote: Any reason to use the keywords that only exist in C-family languages when the functionality isn't actually like C?
Well, it's the same for the "for" statement.
- if case_expr is not a tuple, the case suite will be executed if
switch_expr == case_expr
- if a case_expr is checked, any subsequent elcase statements are
skipped, and the next case statement is performed, of there's one. This is completely identical to if - elif.
While you can figure out what this means with a bit of work, it seems to add a lot of conceptual complexity, and I can't think of any other language that does this.
Bash case statement is similar. IMHO this syntax is very simple, simpler than C-like switch statements. Why do you think it is complex?
why not consider features that other languages do have, like pattern
I do not know much about pattern matching. Using my little knowledge, Python have recursive functions and regular expressions. You could also use generator expressions with my switch statement proposal. Symbolic pattern is powerful, but it's a bit too much for this little proposal.
if you want to match (1, 'b') you'd have to write case ((1, 'b'),). Which
is bad for static cases, and even worse for dynamic ones.
Yes, it's not so elegant, but I do not think that it will really matters in real world usage. What do you mean exactly with "dynamic cases"?