What does i = i mean when creating lambda in python?

I came across this example from the Python Hitchhiking Guide :

def create_multipliers():
    return [lambda x, i=i : i * x for i in range(5)]

The above example is a solution to some of the problems caused by late binding, when the variables used in the closure are scanned during an internal function call.

What does i = i mean and why does he make such a difference?

+4
source share
2 answers

This is actually not only for lambda; any function using default parameters will use the same syntax. for instance

def my_range(start, end, increment=1):
    ans = []
    while start < end:
        ans.append(start)
        start += increment
    return ans

( , , , ). my_range(5,10), [5,6,7,8,9]. my_range(5,10,increment=2), [5, 7, 9].

. , , , . - , . , :

def create_multipliers():
    return [lambda x : i * x for i in range(5)]
for multiplier in create_multipliers():
    print multiplier(2)

multiplier(2), ? , 2 i * 2. i? , i , . i - , , - 4. , 8.

, , i . i? , , , . , i !

, , -. ,

def create_multipliers():
    return [(lambda x, y=i: y*x) for i in range(5)]
+1

-:

def create_multipliers():
  return [lambda x, i=i : i * x for i in range(5)]

lambda x, i=0
lambda x, i=1
lambda x, i=2
lambda x, i=3
lambda x, i=4

, ( )

for f in create_multipliers():
  print(f(3))

0
3
6
9
12

,

for f in create_multipliers():
  print(f(3,2))

6
6
6
6
6

, ,

, :

square = lambda n, m=0: 0 if n==m else n+square(n,m+1)

,

+3

Source: https://habr.com/ru/post/1688903/


All Articles