for i in range(0,3):
j = 0
print 'incrementing '
j += 1
print j
prints
incrementing
1
incrementing
1
incrementing
1
How can I persist the value of 'j' so that it prints:
1
2
3
From stackoverflow
-
You should not reset
jto zero in the loop:j = 0 for i in range(0,3): print 'incrementng ' j += 1 print j -
A very dirty hack if you want to put this in a function: default arguments! In Python, if a default argument is an array, it becomes "static" and mutable, you can keep it through different calls, like this:
def f(j = [0]): j[0] += 1 print('incrementing', j[0]) f() # prints "incrementing 1" f() # prints "incrementing 2" f() # prints "incrementing 3"Have fun!
Edit:
Amazing, downmoded without any explanation why this hack is bad or off-topic. Default arguments in Python are evaluated at parse-time, am I wrong? I don't think I am, I just expected intelligent answers instead of negative points on my post...
batbrat : Why would you want to do this? I don't know about the dirty hack part. However, it appears to me that you have misunderstood the question. He wants to print 1,2,3 and thus he must not reset j in the loop...random : As I said, it's a dirty hack if you want to mix all the code inside a function. I have not misunderstood the question, I just "emulated" a static function member, that's the dirty hack...Paolo Bergantino : I think the point being made is that the OP is obviously a beginner and was making a simple mistake that can be easily fixed, this "solution" is totally irrelevant to the scope of the question.random : I thought the point of StackOverflow was to expand the solutions, and discuss more deeply about the questions. I am mistaken, this sucks huge balls...Mike Boers : @Paolo: Agreed. While this does do what it states (and is a dirty hack), it does not address the actual question asked.nosklo : -1: giving complex code to beginners that misses the point of the question won't help.
0 comments:
Post a Comment