Да, обычная «проблема с областями видимости» (на самом деле проблема с привязкой позже, чем вы хотите, но ее часто называют именно этим именем). Вы уже получили два лучших (потому что самых простых) ответа - «поддельное решение по умолчанию» i=i
и functools.partial
, поэтому я даю только третий из классических трех - «заводская лямбда»:
for i in range(0,10):
funcs.append((lambda i: lambda x: f(i, x))(i))
Лично я бы пошел с i=i
, если бы не было риска случайного вызова функций в funcs
с 2 параметрами вместо 1, но подход к заводским функциям стоит рассмотреть, когда вам нужно что-то более богатое чем просто предварительное связывание одного аргумента.