Python Forum
Tuple generator, and function/class syntax
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tuple generator, and function/class syntax
#1
Question 1: I know that I can generate a list of some numbers using list comprehension. And the same syntax works with set. This is not a lazy operation so the following code might take a while to complete.
[ x for x in range(100000000)]
{ x for x in range(100000000)}
But when I try to generate a tuple of some numbers using comprehension, it uses generator, and therefore lazy operation. The following code returns immediately.
( x for x in range(100000000))
I know that I can use tuple(x for x in range(100000000)) to get the expected result, but I am wondering why () triggers generator, but not with with [] and {}.

Question 2: As I am learning python, I was under the assumption range() is a generator function. But upon reading the python documentation I realized it is a class, not a function.

So, when I see a code that appears like something() - there is no way for me to find out if I am looking at a class instantiation or a function call without looking at the definition of something - Am I correct?
Reply
#2
A comprehension is a tight little loop that loads a mutable container type (lists, sets, dictionaries) with values. A tuple is an immutable type. Once created it cannot be modified. A tuple comprehension is an impossibility.
Reply
#3
Sorry, I am not following your logic.

(Aug-10-2021, 02:35 AM)deanhystad Wrote: Once created it cannot be modified.

Why not instantiate it during creation? For example, why not treat ( x for x in range(10)) as (10, 10, 10, 10, 10, 10, 10, 10, 10, 10)?
Reply
#4
There is no such thing as "tuple comprehension". This (x for x in range(100000000)) is generator expression.

Read Generator expressions and list comprehensions and also PEP-0289 for more details.

That said, you need to know that in python 3 range() is lazy and will return range object, i.e. range(100000000) will produce range object and it will be consumed when needed, not generate all numbers in memory (like in python2, where we have lazy xrange()). So basically you create [lazy] generator from lazy range object

you can do list(range(100000000)), set(range(100000000)) and tuple(range(100000000)) to produce list, set or tuple respectively.

(Aug-10-2021, 03:28 AM)quazirfan Wrote: Why not instantiate it during creation? For example, why not treat (x for x in range(10)) as (10, 10, 10, 10, 10, 10, 10, 10, 10, 10)

in any case this will never be (10, 10, 10, 10, 10, 10, 10, 10, 10, 10). it will be (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) if it was a tuple and not generator expression...
quazirfan likes this post
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  The function of double underscore back and front in a class function name? Pedroski55 9 669 Feb-19-2024, 03:51 PM
Last Post: deanhystad
  [Solved] unkown (to me) function def parm "name1:name2" syntax. MvGulik 5 1,072 Nov-11-2022, 11:21 AM
Last Post: MvGulik
  search a list or tuple for a specific type ot class Skaperen 8 1,942 Jul-22-2022, 10:29 PM
Last Post: Skaperen
  TimeOut a function in a class ? Armandito 1 1,656 Apr-25-2022, 04:51 PM
Last Post: Gribouillis
  meaning of -> syntax in function definition DrakeSoft 5 1,965 Apr-09-2022, 07:45 AM
Last Post: DrakeSoft
  Calling a class from a function jc4d 5 1,823 Dec-17-2021, 09:04 PM
Last Post: ndc85430
  invalid syntax in my class CompleteNewb 2 1,912 Dec-13-2021, 09:39 AM
Last Post: Larz60+
Star I'm getting syntax error while using input function in def. yecktmpmbyrv 1 1,977 Oct-06-2021, 09:39 AM
Last Post: menator01
  a function common to methods of a class Skaperen 7 2,595 Oct-04-2021, 07:07 PM
Last Post: Skaperen
  Sort Function: <' not supported between instances of 'float' and 'tuple' quest 2 8,085 Apr-30-2021, 07:37 PM
Last Post: quest

Forum Jump:

User Panel Messages

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