JavaScript has an early proposal for this use-case:
https://github.com/tc39/proposal-partial-application#pipeline-and-partial-application
where "cat data | sort | cut -d; -f6 | grep ^foo | sort -r | uniq -c" could
be represented as:
  data
    |> sort
    |> cut(?, delimeter=";", fields=6)
    |> grep(?, "^foo")
    |> sort(?, reverse=True)
    |> uniq(?, count=True)

A very similar operator already exists for Hack which has served to clean
up a lot of code at Facebook:
https://docs.hhvm.com/hack/expressions-and-operators/pipe

( fun fact: I was one of the people who asked for __matmul__ back in the
day, but now I prefer the pipeline operator as it's not restricted to unary
functions and is, IMHO, more readable
https://mail.python.org/archives/list/python-ideas@python.org/message/I4DXFR4P5KAMHDL4MRAM43QCUMW4MIJY
)

On Sun, May 24, 2020 at 7:33 PM David Mertz <me...@gnosis.cx> wrote:

> On Sun, May 24, 2020 at 6:56 PM Steven D'Aprano <st...@pearwood.info>
> wrote:
>
>> > I use bash a lot, and writing something like this is common:
>> > cat data | sort | cut -d; -f6 | grep ^foo | sort -r | uniq -c
>>
>> And today's "Useless Use Of cat Award" goes to... :-)
>>
>>     sort data | ...
>>
>> (What is it specifically about cat that is so attractive? I almost
>> certainly would have done exactly what you did, even knowing that sort
>> will take a file argument.)
>>
>
> This is probably going afield since it is a bash thing, not a Python
> thing.  But I can actually answer this quite specifically.
>
> When I write a pipeline like that, I usually do not do it in one pass.  I
> write a couple of the stages, look at what I have, and then add some more
> stages until I get it right.  Many of the commands in the pipeline can take
> a file argument (not just sort, also cut, also grep, also uniq...
> everything I used in the example).
>
> But I find fairly often that I need to add a step BEFORE what I initially
> thought was first processing step.  And then I have to remove the filename
> as an argument of that no-longer-first step.  Rinse and repeat.  With `cat`
> I know it does nothing, and I won't have to change it later (well, OK,
> sometimes I want -n or -s).  So it is a completely generic "data" object
> ... sort of like how I would write "fluent programming" starting with a
> Pandas DataFrame, for example, and calling chains of methods..
>
> --
> The dead increasingly dominate and strangle both the living and the
> not-yet born.  Vampiric capital and undead corporate persons abuse
> the lives and control the thoughts of homo faber. Ideas, once born,
> become abortifacients against new conceptions.
> _______________________________________________
> 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/7DRNTPAWCU5SA666E6ZLEXZQVUYCS7VN/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
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/VL5KWUV5TFTDS5VWTKP2MBL47GP4IU75/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to