Ваши переменные hour
и minute
изменяют до . Вызывается лямбда.
hour = 1
minute = 30
# the values of `hour` and `minute` right now are irrelevant
t1 = Test(lambda x: x.replace(hour=hour, minute=minute))
hour=2
minute=30
# the values of `hour` and `minute` right now are irrelevant
t2 = Test(lambda x: x.replace(hour=hour, minute=minute))
# the values of `hour` and `minute` RIGHT NOW are relevant
# and RIGHT NOW they are 2 and 30, respectively
print(t1.getDate())
print(t2.getDate())
Лямбда ссылается на переменные, но не копирует их значения. Другими словами, используются значения во время выполнения лямбда-функций, а не значения во время их установки.
Ваши параметры:
Жесткий код значений в лямбде:
t1 = Test(lambda x: x.replace(hour=1, minute=30))
Изменить порядок исполнения. Вызовите лямбду, прежде чем изменить значения hour
и minute
.
hour1 = 1
minute1 = 30
t1 = Test(lambda x: x.replace(hour=hour, minute=minute))
print(t1.getDate())
hour1 = 2
minute1 = 30
Используйте разные имена переменных для каждой лямбды.
hour1 = 1
minute1 = 30
t1 = Test(lambda x: x.replace(hour=hour1, minute=minute1))
print(t1.getDate())
Используйте разные области видимости, чтобы лямбды не ссылались на одинаковых hour
и minute
, например, с помощью функции. По сути, это похоже на использование разных имен переменных.
def helper_function(hour, minute)
return Test(lambda x: x.replace(hour=hour, minute=minute))
t1 = helper_function(1, 30)
t2 = helper_function(2, 30)
print(t1.getDate())
print(t2.getDate())
Использование разных областей видимости, вероятно, является наиболее элегантным подходом.