[Tutor] How is the return statement working in this function? Classic List Threaded 4 messages Open this post in threaded view
|

[Tutor] How is the return statement working in this function?

 I am just wondering if anyone can explain how the return statement in this function is working (the code is from activestate.com)? Where does x come from – it is not initialized anywhere else and then just appears in the return statement. Any help would be appreciated.     def primes(n):     """Prime number generator up to n - (generates a list)"""     if n == 2: return      elif n < 2: return []     s = range(3, n + 1, 2)     mroot = n ** 0.5     half = (n + 1)/2 - 1     i = 0     m = 3     while m <= mroot:         if s[i]:             j = (m * m - 3)/2             s[j] = 0             while j < half:                 s[j] = 0                 j += m         i = i + 1         m = 2 * i + 3     return +[x for x in s if x] _______________________________________________ Tutor maillist  -  [hidden email] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Open this post in threaded view
|

Re: [Tutor] How is the return statement working in this function?

 On 04/05/2012 08:39 PM, Greg Christian wrote: > I am just wondering if anyone can explain how the return statement in this function is working (the code is from activestate.com)? Where does x come from – it is not initialized anywhere else and then just appears in the return statement. Any help would be appreciated. > > > def primes(n): >     """Prime number generator up to n - (generates a list)""" >     ## {{{ http://code.activestate.com/recipes/366178/ (r5) >     if n == 2: return  >     elif n < 2: return [] >     s = range(3, n + 1, 2) >     mroot = n ** 0.5 >     half = (n + 1)/2 - 1 >     i = 0 >     m = 3 >     while m <= mroot: >         if s[i]: >             j = (m * m - 3)/2 >             s[j] = 0 >             while j < half: >                 s[j] = 0 >                 j += m >         i = i + 1 >         m = 2 * i + 3 >     return +[x for x in s if x] > The expression [x for x in s if x] is called a list comprehension, and it defines x as it needs it.   The results of that expression is a list, which is concatenated to the end of the list , and the combined list is returned. For example, try the one-liner:     print    [i for i in xrange(5)] -- DaveA _______________________________________________ Tutor maillist  -  [hidden email] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor