В Python 3 вы можете сделать это:
>>> def f(a):
... h = 1
... def inner():
... nonlocal h
... print(a+h)
... h += 1
... return inner
... return inner
...
>>> g = f(3)
>>> g = g()
4
>>> g = g()
5
>>> g = g()
6
>>> g()()()
7
8
9
<function inner at 0xb71bcd6c>
Предыдущие версии требовали подделки:
>>> def f(a):
... h = [1]
... def inner():
... print a + h[0]
... h[0] += 1
... return inner
... return inner
...
>>> f(3)()()()
4
5
6
<function inner at 0x10041f050>
>>>
(ETA: я полагаю, что я неправильно истолковал часть вопроса, поскольку кажется, что вы хотите, чтобы функция, возвращаемая f
(и она возвращает себя), приняла аргумент, но это тривиальное изменение.)