huyanmin 发表于 2021-3-10 10:17:18

python 39课习题,求详解,

class Stack:
    def __init__(self, start=[]):
      self.stack = []#此处为什么不这样,self.stack=start,这样就省去了下面两句
      for x in start:#此处的start列表是形参start=[]引用过来的吗
            self.push(x)

    def isEmpty(self):
      return not self.stack
   
    def push(self, obj):
      self.stack.append(obj)

    def pop(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack.pop()

    def top(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack[-1]

    def bottom(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack

逃兵 发表于 2021-3-10 10:34:50

本帖最后由 逃兵 于 2021-3-10 10:36 编辑

start是列表

字典,列表,集合都是不可哈希数据

如果按照你的想法进行修改,更改外部变量start

生成的实例会随着start的变化而变化,有时候会引发出乎我们意料的bug

class Stack:
    def __init__(self, start=[]):
      self.stack=start
    def isEmpty(self):
      return not self.stack
   
    def push(self, obj):
      self.stack.append(obj)

    def pop(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack.pop()

    def top(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack[-1]

    def bottom(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack


>>> start = []
>>> a = Stack(start)
>>> a.stack
[]
>>> start.append(1)
>>> a.stack

>>>

使用迭代赋值的方法,生成的实例不会随着start的变化而变化

>>> start = []
>>> a = Stack(start)
>>> a.stack
[]
>>> start.append(1)
>>> a.stack
[]
页: [1]
查看完整版本: python 39课习题,求详解,