Python Forum
duplication in list comprehension - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: duplication in list comprehension (/thread-1749.html)

Pages: 1 2


RE: duplication in list comprehension - micseydel - Feb-02-2017

extend() has a side effect. If the list comp is of a function that only ever returns None, it's almost certainly using a side effect (unless it's a weird NOOP).


RE: duplication in list comprehension - wavic - Feb-02-2017

Hm!
I saw that it returns None but if you guys know how to do it without this happens, say something. I am curious is it possible?
Which is better? To leave the empty list result to the GC/del or to avoid the list comprehension in such cases.


RE: duplication in list comprehension - micseydel - Feb-02-2017

Comprehensions are about generating values. If you don't want to generate values... use a regular loop. The closest you can get is a generate comprehension and calling all() on it, but again, there will be tons of values and processing done that isn't needed. Not the kind of thing you'd necessarily optimize out if it were generally ok to do and things weren't too slow, but silly to throw in for no good reason.

Comprehensions are great when you want to generate values. They're bad for side effects, both because it's confusing to a reader and because it needlessly wastes resources.


RE: duplication in list comprehension - Skaperen - Feb-03-2017

(Feb-02-2017, 02:07 AM)micseydel Wrote: extend() has a side effect. If the list comp is of a function that only ever returns None, it's almost certainly using a side effect (unless it's a weird NOOP).

what side effect does extend() have, that is not its definition as a method of the list object it is a method of?

i'm still trying to understand how side-effects became an issue here.  i think side-effects are a bad thing. but it certain cases they are suppose to happen (then the argument needs to be why to not use or not have that method, or not have/use some of what it does).


RE: duplication in list comprehension - micseydel - Feb-03-2017

The side-effect is that it mutates a structure. It mutates the underlying list.

(Feb-03-2017, 01:01 AM)Skaperen Wrote: i'm still trying to understand how side-effects became an issue here
They were used in a comprehension. They shouldn't be used in a comprehension.

(Feb-03-2017, 01:01 AM)Skaperen Wrote: i think side-effects are a bad thing
I agree with that. The fewer and more localized side-effects the better. Sometimes side-effects are a very helpful for efficiency though. Imagine if to extend() a list you needed to create a brand new one. Building one in a loop would be quadratic time, as well as the external memory use fragmentation being unfortunate. (There are solutions to this other than side-effects / mutation but there are other trade offs.)

I could probably blabber on forever about functional programming and how awful side effects are, but can we just call this one at "side-effects in a comprehension are bad"? Just write a loop for goodness' sake!


RE: duplication in list comprehension - Mekire - Feb-03-2017

I'm also confused as I already provided a list comp method that does exactly this with no side-effects (the pattern of which can be used for triple or quadruple or whatever as well).