如果我在条件语句内使用。pop(),那么即使条件不满足,pop仍然执行吗?
例如。
if something != stack.pop():
return False
else:
return True
假设条件不满足且不返回False,那么[stack]的最后一个元素是否仍然弹出?
是,在条件评估期间弹出该项。 无论结果如何,项目都已弹出。 您可以通过在每种情况下打印堆栈来测试这一点。
def myfunc(stack):
if 4 != stack.pop(): # Swap 4 to test
print(stack) # [1, 2, 3]
return False
else:
print(stack) # [1, 2, 3]
return True
if __name__ == '__main__':
print( myfunc([1, 2, 3, 4]) )
是的,它会爆炸,因为你叫它。 不管你在哪里称呼它,不管它是一个条件还是作为一个参数传递它,它都将完成它的任务“pop”。
如果您想安全地同时检查值和弹出,那么添加一个额外的行将不会造成伤害。
if something != stack[-1]:
stack.pop()
return False
else:
return True
注意:我做这个例子时考虑到stack
是一个列表,因为pop()
将从列表中删除最后一项,所以我做了stack[-1]
。
在条件句中,您将与POP的结果进行比较。 所以需要执行pop,以便进行实际的比较。
像这样想
temp = stack.pop()
if 4 != temp: