vanam wrote: > ya i am sure about that i am using python editor which has python > intrepreter attached to it i got the same output for both filter and map > def squ(n): > y = n*n > print y > filter(y,range(3))->0 1 4 > map(y,range(3))->0 1 4
This is quite different that what you posted the first time. This function squ() *prints* n*n but *returns* None (since it has no explicit return statement). The previous squ() actually returned n*n. But the results are still different if you look carefully: In [2]: def sq(n): ...: y=n*n ...: print y ...: ...: In [3]: map(sq, range(3)) 0 1 4 Out[3]: [None, None, None] The function sq() is called for each element of range(3) and prints the square. This is why 0, 1, 4 are printed. But the value returned from map() is the list [None, None, None] which is the accumulated return values from calling sq(). In [4]: filter(sq, range(3)) 0 1 4 Out[4]: [] Here, sq() is still called for each element of range(3). Since the printing is from sq(), 0, 1 and 4 are still printed. But the return value is an empty list [] because None is not true so sq(n) is not true for any elements of range(3). Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor