Почему эти два «х» относятся к разным переменным?

В этом коде x в лямбде ссылается на x в операторе for. Такy[0]() возвращает 2:

x = 0
y = [lambda : x for x in range(3)]
y[0]()

Но в этом коде x в лямбда-выражении относится к глобальному x, поэтомуx[0]() возвращает глобальный х сам:

x = [lambda : x for x in range(3)]
x[0]()

Я хочу знать, почему x в лямбде ссылается на локальный x в первом фрагменте кода, но глобальный x во втором фрагменте кода.

Ответы на вопрос(3)

Ваш ответ на вопрос