It is good to consider the alternatives indeed - the counter method might work also:
One way to do it is actually save the counter as the functions default argument! This avoids maintaining an extra global set of counters for each parameter.
fns = []

for i in range(10):
    def fn(x = [0]):
        x[0] += 1
        print(x[0])
    fns.append(fn)

fns[0]() # 1
fns[1]() # 1
fns[2]() # 1

fns[0]() # 2