На мой взгляд, в данном случае просто напрашивается применение генераторов:
def counter(start):
curr = start
while 1:
curr += 1
yield curr
f1 = counter(4)
print f1 #<generator object at 0x00BF96C0>
print f1.next() #5
print f1.next() #6
И обертка, если не нравится использование .next()
def counter2(start):
return counter(start).next
f2 = counter2(3)
print f2 #<method-wrapper 'next' of generator object at 0x00BF9850>
print f2() #4
print f2() #5
Ибо использование глобальной переменной может привести к неожиданным эффектам при использовании двух и более объектов counter()…