Although that particular example once compiled to python will generate many many lines of code:
On Sat, Apr 7, 2018 at 4:17 PM, Nikolas Vanderhoof < nikolasrvanderh...@gmail.com> wrote: > And this should print: > > 'some data' > 1 > 2 > 3 > > On Sat, Apr 7, 2018 at 4:16 PM, Nikolas Vanderhoof < > nikolasrvanderh...@gmail.com> wrote: > >> This would be a very handy feature, but Coconut (which is just python >> with some extra functional-style features) also has support for this kind >> of pattern-matching: >> http://coconut-lang.org >> >> >> Since Coconut will compile to Python (2 or 3) you can just write in >> Coconut and use the resulting code in your Python. >> >> Using your first example in coconut would be nearly identical, except I >> believe the entire dictionary must be specified (I am not sure about this). >> >> data = { >> 'direct': 'some data', >> 'nested': { >> 'lst_data': [1, 2, 3], >> 'int_data': 1 >> } >> } >> >> { >> 'direct': direct, >> 'nested': { >> 'lst_data': [a, b, c], >> 'int_data': _ >> } >> } = data >> >> print(direct) >> print(a) >> print(b) >> print(c) >> >> >> And this should print: >> >> On Sat, Apr 7, 2018 at 1:26 PM, thautwarm <yaoxiansa...@gmail.com> wrote: >> >>> We know that Python support the destructing of iterable objects. >>> >>> m_iter = (_ for _ in range(10)) >>> a, *b, c = m_iter >>> >>> That's pretty cool! It's really convenient when there're many corner >>> cases to handle with iterable collections. >>> However destructing in Python could be more convenient if we support >>> dictionary destructing. >>> >>> In my opinion, dictionary destructing is not difficult to implement and >>> makes the syntax more expressive. A typical example is data access on >>> nested data structures(just like JSON), destructing a dictionary makes >>> the logic quite clear: >>> >>> data = { >>> "direct": "some data", >>> "nested": { >>> "lst_data": [1, 2, 3], >>> "int_data": 1 >>> } >>> } >>> { >>> "direct": direct, >>> "nested": { >>> "lst_data": [a, b, c], >>> } >>> } = data >>> >>> >>> Dictionary destructing might not be very well-known but it really helps. >>> The operations on nested key-value collections are very frequent, and the >>> codes for business logic are not readable enough until now. Moreover Python >>> is now popular in data processing which must be enhanced by the entire >>> support of data destructing. >>> >>> Here are some implementations of other languages: >>> Elixir, which is also a popular dynamic language nowadays. >>> >>> iex> %{} = %{:a => 1, 2 => :b} >>> %{2 => :b, :a => 1} >>> iex> %{:a => a} = %{:a => 1, 2 => :b} >>> %{2 => :b, :a => 1} >>> iex> a >>> 1 >>> iex> %{:c => c} = %{:a => 1, 2 => :b} >>> ** (MatchError) no match of right hand side value: %{2 => :b, :a => 1} >>> >>> And in F#, there is something similar to dictionary >>> destructing(actually, this destructs `struct` instead) >>> type MyRecord = { Name: string; ID: int } let IsMatchByName record1 >>> (name: string) = match record1 with | { MyRecord.Name = nameFound; >>> MyRecord.ID = _; } when nameFound = name -> true | _ -> false let >>> recordX = { Name = "Parker"; ID = 10 } let isMatched1 = IsMatchByName >>> recordX "Parker" let isMatched2 = IsMatchByName recordX "Hartono" >>> >>> All of them partially destructs(or matches) a dictionary. >>> >>> thautwarm >>> >>> >>> _______________________________________________ >>> Python-ideas mailing list >>> Python-ideas@python.org >>> https://mail.python.org/mailman/listinfo/python-ideas >>> Code of Conduct: http://python.org/psf/codeofconduct/ >>> >>> >> >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/