[Python-ideas] Another use case for the 'lazy' (aka 'delayed') keyword

Joseph Hackman josephhackman at gmail.com
Tue Feb 28 10:08:46 EST 2017


Yes I do think this is precisely where a lazy or delayed feature would work well. I'm working on writing up a complete PEP now, and have made some progress on the things left unsolved in the other thread. I will post again when the PEP is closer to complete. 

Fundamentally, anything can be done, but I don't think that altering the code of others for one case is Pythonic, and though it happens, I think there is value in making it less necessary. 

Cheers!
Joseph

> On Feb 28, 2017, at 9:46 AM, Michel Desmoulin <desmoulinmichel at gmail.com> wrote:
> 
> 
>> Le 28/02/2017 à 13:47, Markus Meskanen a écrit :
>>    You don't need list comprehension, you can use a for loop.
>> 
>>    You don't need upacking you can use indexing.
>> 
>>    And you don't need lazy, it's just convenient.
>> 
>> 
>> With this sole argument you can add almost anything to the language as
>> long as it has at least one use case where it's better than existing
>> tools. I'm not against the lazy proposal in general, but attempting to
>> justify a new keyword to replace this is just silly to me:
>> 
>> class Config(dict):
>>    def lazy_get(self, key, callable=None):
>>        if key in self:
>>            return self[key]
>>        return callable(key)
> 
> With this sole argument you can reject await / async because we could do
> it with yield from and decorator.
> 
> With this solve argument you can reject comprehension because we have
> map and filter.
> 
> With this solve argument you can reject defauldict because we can code
> one ourself.
> 
> I mean come on, a decorator is just:
> 
> @decorator
> def decorated():
> 
> Instead of
> 
> decorated = decorator(decorated)
> 
> It's just convenience and elegance.
> 
> The sweet spot for lazy is a use case where you can't easily modify the
> code to get your getter and setter. You example again makes the
> assumption you can easily add such a wrapper. But if you can't, then you
> have to import it and wrap the config object in every module using it.
> Test all that. Ensure you don't pass the wrapper by accident to
> something that would break on it, etc.
> 
> And how many time do you have to do that ?
> 
> You will write your wrapper for lists ? And tuples ?
> 
> And will you test those ? document those ? Explain to others that to get
> a callable, you need to pass a callable returning a callable ?
> 
> Then again for your next project or you do a library with all the stuff
> it implies ?
> 
> It's neither convenient nor elegant.
> 
> lazy is not only practical, but it's also beautiful. It reads well. It
> solves a problem we all have on a regular basis.
> 
> Yes we can live without it. I mean, Python is already incredibly
> convenient, of course whatever we suggest now is going to be a cherry on
> top of the language cake.
> 
> And yes I got a big mouth because it's a lot of work to implement it and
> it's work I'm not capable to do since I can't code in C to save my life.
> 
> Does it removes the merits from lazy ?
> 
> Wouldn't you like it to just be able to drop "lazy" in your next 3.7 code ?
> 
> 
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/


More information about the Python-ideas mailing list