Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 1st, 2012  |  syntax: None  |  size: 0.97 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Getting confused with lambda and list comprehension
  2. In [1]: [lambda: x for x in range(5)][0]()
  3. Out[1]: 4
  4. In [2]: [lambda: x for x in range(5)][2]()
  5. Out[2]: 4
  6.        
  7. In [4]: [lambda: x for x in [1,5,7,3]][0]()
  8. Out[4]: 3
  9.        
  10. funcs = []
  11. for x in range(5):
  12.     def f(): return x
  13.     funcs.append(f)
  14. funcs[0]() # returns 4
  15.        
  16. x = 32
  17. funcs[2]() # returns 32
  18.        
  19. In [39]: [lambda: x for x in [1,5,7,3]]
  20. Out[39]:
  21. [<function <lambda> at 0x2cd1320>,
  22.  <function <lambda> at 0x2cd12a8>,
  23.  <function <lambda> at 0x2cd10c8>,
  24.  <function <lambda> at 0x2cd1050>]
  25.        
  26. In [40]: [lambda: x for x in [1,5,7,3]][1]
  27. Out[40]: <function <lambda> at 0x2cd1488>
  28.        
  29. In [41]: [lambda: 2][0]()
  30. Out[41]: 2
  31.  
  32.  
  33. In [42]: alist = [1,5,7,3,4,5,6,7]
  34.        
  35. In [43]: def f(x):
  36.    ....:     for x in alist:
  37.    ....:         pass
  38.    ....:     return x
  39. In [44]: print f(alist)
  40. 7
  41.        
  42. [(lambda(i): lambda: i)(x) for x in range(5)][2]()
  43.        
  44. [(lambda(i): lambda: i)(x) for x in range(5)][2]()
  45.        
  46. [lambda i=x: i for x in range(5)][2]()