Python Forum
duplication in list comprehension
Thread Rating:
  • 1 Vote(s) - 3 Average
  • 1
  • 2
  • 3
  • 4
  • 5
duplication in list comprehension
#11
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).
Reply
#12
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.
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#13
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.
Reply
#14
(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).
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#15
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!
Reply
#16
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).
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  List Comprehension Issue johnywhy 5 438 Jan-14-2024, 07:58 AM
Last Post: Pedroski55
Question mypy unable to analyse types of tuple elements in a list comprehension tomciodev 1 426 Oct-17-2023, 09:46 AM
Last Post: tomciodev
  Using list comprehension with 'yield' in function tester_V 5 1,175 Apr-02-2023, 06:31 PM
Last Post: tester_V
  list comprehension 3lnyn0 4 1,359 Jul-12-2022, 09:49 AM
Last Post: DeaD_EyE
  List comprehension used differently coder_sw99 3 1,679 Oct-03-2021, 04:12 PM
Last Post: coder_sw99
  How to invoke a function with return statement in list comprehension? maiya 4 2,746 Jul-17-2021, 04:30 PM
Last Post: maiya
  List comprehension and Lambda cametan 2 2,196 Jun-08-2021, 08:29 AM
Last Post: cametan
  What is the difference between a generator and a list comprehension? Pedroski55 2 2,175 Jan-02-2021, 04:24 AM
Last Post: Pedroski55
  For Loop with List Comprehension muzikman 25 6,406 Dec-18-2020, 10:45 PM
Last Post: muzikman
  Using recursion instead of for loops / list comprehension Drone4four 4 3,072 Oct-10-2020, 05:53 AM
Last Post: ndc85430

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020