I've declared 2 variables the same exact way, but when I'm calling them stack is being referenced fine. But python is not able to reference top. What is the issue here?
def isValid(s):
top=-1
stack=[-1]*10005
def push(x):
print(top)
top =1
stack[top]=x
push()
print(isValid(input()))
CodePudding user response:
The previous answer is mostly correct. Python considers any variable that you directly change the value of to be a local variable. Since you write top = 1, top is directly modified inside push, and is a local variable to push. The variable stack, on the other hand, is not changed.
I consider the fact that Python considers = operators to cause a variable to become local to be a bit of a bug. But it's too ingrained in the language.
And yes, the correct solution is to use nonlocal.
If you removed the top = 1 line, your code wouldn't work, but top would refer to the outer variable.
CodePudding user response:
Because push is indented inside isValid, it can't change the value of top from its "parent" function.
You can use nonlocal:
def isValid(s):
top=-1
stack=[-1]*10005
def push(x):
nonlocal top
print(top)
top =1
stack[top]=x
