def num():
return [lambda x: i * x for i in range(4)]
print([m(2) for m in num()])
咋一看,这道题似乎在考察生成器,又或列表推导式,惰性机制,只能往前,,,no,no,no
这道题重点在于闭包,lambda函数相当于num函数的内层函数,而i就是lambda调用的外层的函数的变量,
而i值一直在变,最后成为3,所以4个内层函数的lambda的i值都是3,
解构:
def num():
lis = []
for i in range(4): # 这里想当于外层函数的变量i
lis.append(lambda x: i * x ) # lambda相当于内层函数
print(i)
return lis
最后结果 : [6,6,6,6]
编码风格:
# 编码习惯:在提示报错信息时,用raise抛异常
class StackFullError(Exception):
pass
class StackEmptyError(Exception):
pass
class StackC:
def __init__(self, size):
self.next = 0 # 栈的指针
self.ls = [] # 栈的容器
self.size = size # 栈的大小
def push(self, value):
if self.next == self.size:
raise StackFullError('栈满了')
self.ls.insert(self.next, value)
self.next += 1
def get(self):
if self.next == 0:
raise StackEmptyError('栈空')
self.next -= 1
return self.ls[self.next]