Re: [BangPypers] Issue with list comprehension

2013-11-07 Thread Abdul Muneer
Hi,
"_sum=sum([n for n in itertools.takewhile(lambda x: x < 400, fib)])
TypeError: 'int' object is not callable"

Probably 'sum' might have been used earlier in the code to store the value
of some integer. "sum" is a builtin function but the moment you assign
sum=(x+y) or something, you have lost that function. If you are doubtful,
do `from __builtin__ import * ` to reclaim your builtin variables and
functions.

Regards,
Abdul Muneer

--
Follow me on Twitter: @abdulmuneer 


On Thu, Oct 31, 2013 at 12:22 PM, Asokan Pichai  wrote:

> import itertools
>
> def fib():
>   a, b = 0, 1
>   while True:
>   yield b
>   a, b = b, a+b
>
> print sum(itertools.takewhile(lambda x: x < 400, fib))
> ---
> I tried the above; and it worked too (986)
>
> Asokan Pichai
> ___
> BangPypers mailing list
> BangPypers@python.org
> https://mail.python.org/mailman/listinfo/bangpypers
>
___
BangPypers mailing list
BangPypers@python.org
https://mail.python.org/mailman/listinfo/bangpypers


Re: [BangPypers] Issue with list comprehension

2013-10-30 Thread Asokan Pichai
import itertools

def fib():
  a, b = 0, 1
  while True:
  yield b
  a, b = b, a+b

print sum(itertools.takewhile(lambda x: x < 400, fib))
---
I tried the above; and it worked too (986)

Asokan Pichai
___
BangPypers mailing list
BangPypers@python.org
https://mail.python.org/mailman/listinfo/bangpypers


Re: [BangPypers] Issue with list comprehension

2013-10-30 Thread Dhananjay Nene
Thats surprising. The code runs just fine

http://ideone.com/06qjoM

(Ans: 986)

As an aside I renamed _sum to sum_

When avoiding naming conflicts, its recommended to postfix a underscore

Prefixing an underscore is to provide a hint that the value that gets
assigned to the variable is going to be ignore (ie. that variable
itself is going to be ignored)

Dhananjay


On Wed, Oct 30, 2013 at 5:42 PM, Anant   wrote:
> Hi folks,
>
> I am new to Python (have been on Java for 8 years), but I have quickly
> grasped its style.
>
> While working on a problem (as Python practice) to generate fibonacci
> numbers using generators and list comprehension, I ran into an issue.
>
> Here's my code:
>
> *import itertools*
> *
> *
> *def fibonacci():*
> *a, b = 0, 1*
> *while True:*
> * yield b*
> * a, b = b, a+b*
> *
> *
> *fib=fibonacci()
> *
> *_sum=sum([n for n in itertools.takewhile(lambda x: x < 400, fib)])*
> *print _sum*
>
> Basically, I wanted to sum up all the fib numbers till 400.
> *This code runs fine when run on REPL (shell). But when I run it*
> *as a script, i get following error:*
>
> Traceback (most recent call last):
>   File "2.py", line 10, in 
> _sum=sum([n for n in itertools.takewhile(lambda x: x < 400, fib)])
> TypeError: 'int' object is not callable
>
>
>  Python version: 2.7.3
>
> Is there a bug in Python or am I missing something? Why does this only work
> in REPL
> and not as shell script?
>
> Thanks for help.
>
> Cheers,
> Anant
> ___
> BangPypers mailing list
> BangPypers@python.org
> https://mail.python.org/mailman/listinfo/bangpypers
___
BangPypers mailing list
BangPypers@python.org
https://mail.python.org/mailman/listinfo/bangpypers