Skip to main content
 首页 » 编程设计

python之在 Python 的空列表中一起使用 "not"和 "bool"的不明确行为

2025年05月04日11mfrbuaa

在这个使用 Python 列表的 Stack 的简单实现中。我有一个小方法来检查堆栈是否为空(列表为空)。我将此方法用作 pop 方法的检查条件。 pop 方法应该在尝试弹出空堆栈时引发异常。出于某种原因,这似乎不起作用。我在这里错过了什么吗?请帮忙!

 __author__ = '@arun' 
# Stack simple implementation using Python list 
 
 
class Stack(object): 
    def __init__(self): 
        self.items = [] 
 
    def push(self, value): 
        self.items.append(value) 
 
    def is_empty(self): 
        return not bool(self.items) 
 
    def pop(self): 
        print self.is_empty() 
        if self.is_empty:  # if not stack is empty 
            return self.items.pop() 
        else: 
            raise Exception("Stack Empty!") 
 
    def peek(self): 
        return self.items[-1] 
 
    def get_size(self): 
        return len(self.items) 
 
if __name__ == '__main__': 
    stack = Stack() 
    print stack.get_size() 
    stack.push(23) 
    stack.push(3) 
    print stack.get_size() 
    print stack.pop() 
    print stack.pop() 
    print stack.get_size() 
    #print stack.pop() 

输出:

0 
2 
False 
3 
False 
23 
0 

为什么 pop() 方法在 is_empty() 返回 False 时弹出元素?!

请您参考如下方法:

if self.is_empty: 

将始终评估为 True,因为它是 Truthy value .你需要像这样调用函数

if self.is_empty(): 

还有一个建议:您可能希望仅在is_empty() 为False 时弹出 值,像这样

if not self.is_empty():