> On 24 Jun 2020, at 19:14, Guido van Rossum <gu...@python.org> wrote: > > (Jakub, next time please trim the original post from your quote to what's > necessary.) > Apologies, unintentional, I was replying from the web interface since I wasn’t subscribed to this gorup when the thread was started and I clicked some wrong buttons.
> > So, now for the one thing that makes me unhappy: the rejected idea to make it > an expression. In my short experience with pattern matching, mainly in Rust, > roughly half (very vague estimate) of its usefulness came from it being an > expression. It's even small things like > > let i = match i { > 9 => 10, > 10 => 9, > _ => i, > }; > > and > > let mut file: Box<Write> = match filename.as_ref() { > "-" => Box::new(io::stdout()), > _ => Box::new(File::create(filename).expect("Cannot open file for > writing")), > }; > > and it adds up. I'm not sure how to approach this with Python syntax and I'll > think about this, but I feel that it'd be a huge missed opportunity to not > have this. > > We considered it, but it simply doesn't work, for the same reason that we > haven't been able to find a suitable multi-line lambda expression. Since > Python fundamentally is not an expression language, this is no great loss -- > you simply write a match statement that assigns a value to the variable in > each branch. Alternatively, the match could be inside a function and each > block could return a value. > > -- > --Guido van Rossum (python.org/~guido) > Pronouns: he/him (why is my pronoun here?) That’s fair, but there’s a way in which this doesn’t have to be equivalent to multi-line lambda expressions. Granted, I should’ve clarified that I thought about it being an expression in a very limited, special way. Let’s take one example from the PEP text: match greeting: case "": print("Hello!") case name: print(f"Hi {name}!”) Let’s say we allow prepending “match …” with an assignment and the value of the assignment is the value of the last statement/expression in the block that’s selected, this allows for the following hypothetical code: message = match greeting: case "": "Hello!" case name: f"Hi {name}!” So I didn’t express this clearly – it’s not a bout full-blown match expressions but rather an optional "assigning form” of match statements. This seems like it wouldn’t affect parsing massively. Jakub _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/5EDYHAPP7CTBXQD5LQFR4A25BVTC3BZN/ Code of Conduct: http://python.org/psf/codeofconduct/