类和对象
class Stack:def __init__(self, start=[]): #start为什么要是列表???
self.stack = [] #定义类的属性???
for x in start:
self.push(x)
def isEmpty(self):
return not self.stack、
def push(self, obj): #obj是什么意思,为何不用x???
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 #这句是什么意思???
huangdongdong 发表于 2021-4-15 17:28
当我删除start = [],for x in statr:,self.push(x) 时也能实现功能,那这几行代码有什么作用呢?
这是让你初始化 Stack 对象的时候,可以选择初始化一个已经有数据的 栈对象 而已。
如果你删除这几行代码的话,你初始化的 Stack 对象就只能是一个空的 栈对象。 第一问: 在函数里面默认参数,一定不建议使用可变类型容器,很容易暴露内存,还有未知Bug。如果一定要用可变类型的容器做默认类型建议这样操作
def a(start=None):
if start is None: start = []
第二问:obj是什么意思,为何不用x??? 这里只是函数的参数名字,可以使用任意合法的变量名字,但是在定义的时候,尽量做到见名字知道这个变量是干嘛的。
第三四问: 返回列表的末尾一个元素。返回列表的第一个元素。 Stubborn 发表于 2021-4-14 16:26
第一问: 在函数里面默认参数,一定不建议使用可变类型容器,很容易暴露内存,还有未知Bug。如果一定要用可 ...
1:如果使用不可变的容器,那为啥不用元组呢?
2:第二问还是不懂,为何还要重新引入变量obj而不是继续使用x 首先你要理解这个类是用 python 来实现 stack(栈)的压栈和出栈,要是不明白的话可以去了解相关知识。
其次你的 python 基础有点差,不建议上来就学习类,如果是急需当我没说。
然后谈谈问题
1. 因为是为了实现栈以及相关操作,如果你知道栈这种数据结构,就明白为什么是用 list 了,至于为什么不用 tuple,因为 tuple 不能实现入栈出栈
2. 这个不是类的属性,是 类实例对象 的属性,通过下面代码就可以知道
s = Stack()
print(s.stack)
print(Stack.stack)
3. obj 没什么意思,只是一个形参名,你可以取任何其他的名字(只要不是关键字),学过 python 函数的话应该会知道这一点
4. 这一句是返回栈顶数据
5. 这一句是返回栈底数据 °蓝鲤歌蓝 发表于 2021-4-14 21:20
首先你要理解这个类是用 python 来实现 stack(栈)的压栈和出栈,要是不明白的话可以去了解相关知识。
其 ...
当我删除start = [],for x in statr:,self.push(x) 时也能实现功能,那这几行代码有什么作用呢?
页:
[1]