Live data from Hacker News

Optimizing the any function in python

oliverspohngellert.com

1–8 of 8 posts

Re: Optimizing the any function in python

#3
post #2

So you're artificially building something that's gives you some of the benefit of using a generator expression in a list expression, instead of just using a generator expression?

I wouldn't call it artificially building something, but I suppose yes. I also find this code to be much more readable than generator code. Once you understand the function, all you have to do is pass it a function that returns a boolean.

Re: Optimizing the any function in python

#4
post #2

So you're artificially building something that's gives you some of the benefit of using a generator expression in a list expression, instead of just using a generator expression?

I wouldn't call it artificially building something, but I suppose yes. I also find this code to be much more readable than generator code. Once you understand the function, all you have to do is pass it a function that returns a boolean.

How is

    any(function_takes_time(i) for i in range(10 ** 3))
harder to read than

    fast_any([(lambda x: (lambda: function_takes_time(x)))(i) for i in range(10 ** 3)])

Re: Optimizing the any function in python

#5
post #4

Earlier quoted context omitted.

I wouldn't call it artificially building something, but I suppose yes. I also find this code to be much more readable than generator code. Once you understand the function, all you have to do is pass it a function that returns a boolean.

How is any(function_takes_time(i) for i in range(10 ** 3)) harder to read than fast_any([(lambda x: (lambda: function_takes_time(x)))(i) for i in range(10 ** 3)])

The first one is clearly easier to read than the second. However the first one is slow. I believe fast_any is easier to read than generator code.

Re: Optimizing the any function in python

#6
post #4

Earlier quoted context omitted.

How is any(function_takes_time(i) for i in range(10 ** 3)) harder to read than fast_any([(lambda x: (lambda: function_takes_time(x)))(i) for i in range(10 ** 3)])

The first one is clearly easier to read than the second. However the first one is slow. I believe fast_any is easier to read than generator code.

The first IS generator code. That's a generator expression, note that it does not have the [] of a list expression.

Re: Optimizing the any function in python

#7
post #4

Earlier quoted context omitted.

How is any(function_takes_time(i) for i in range(10 ** 3)) harder to read than fast_any([(lambda x: (lambda: function_takes_time(x)))(i) for i in range(10 ** 3)])

The first one is clearly easier to read than the second. However the first one is slow. I believe fast_any is easier to read than generator code.

Actually, apologies I see now. I always associated generator's with the `yields` keyword, but maybe I have to look into them again. Thanks!

Re: Optimizing the any function in python

#8
post #4

Earlier quoted context omitted.

I wouldn't call it artificially building something, but I suppose yes. I also find this code to be much more readable than generator code. Once you understand the function, all you have to do is pass it a function that returns a boolean.

How is any(function_takes_time(i) for i in range(10 ** 3)) harder to read than fast_any([(lambda x: (lambda: function_takes_time(x)))(i) for i in range(10 ** 3)])

Yeah, sorry. Looking back into it looks like I was really re-inventing the wheel here. Still a fun exercise for me. Thanks :)