8:42到教室,又睡了一会懒觉,还好没迟到.最近都好困
依旧是花了一个小时讲了昨天的作业,
上午讲了偏函数,变量的作用域.中午回去睡了,然后就睡晚了…迟到了…
顺便介绍一下 一个特殊情况:
a=1
def dd():
global a
a+=1
print(a)
def dd1():
#nonlocal a #此时nonlocal 就无法访问a的地址(此时如果还要用a,则须用global(相当于解释器分不清global a 与nonlocal a 的区别))
a+=1
print(a)
return dd1()
dd()
再介绍一个恒有意思的东西:闭包
def func():
list1=[]
for x in range(10):
def inner():
return x
list1.append(inner) #这里inner函数并没有执行!!!
return list1
print(func()) #这里输出的是外函数list1中的10个inner函数的引用
list2=func()
for x in list2: #神奇的事发生了,输出的全是9!!!
print(x())
第二个情况的发生原因是,在外函数结束时,内函数仍在继续执行,其中在外函数定义的x在外函数执行完时被绑定给了内函数inner(此时x=9给了inner(),然后inner返回x.之前的值]因为inner并没有执行,就丢失了.).最后等内函数执行完时(x()实际上就相当执行了之前存入list1中的函数引用,因为inner函数最后返回x),x就等于9了.
emm,作业就不展示了,好简单