#The diary of a Python learner
Date:21.12.2023 Thurs.
Focus:返回函数、闭包对于内存的保护
Key:
闭包尽量避免循环变量作为外层参数
若要对外层函数赋值,同时保证不被初始化,提前用nonlocal在内层声明
Practice:
1.利用闭包返回一个计数器函数,每次调用它返回递增整数:
# -*- coding: utf-8 -*-
def createCounter():
x=0
def counter():
nonlocal x
x=x+1
return x
return counter
# 测试:
counterA = createCounter()
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
counterB = createCounter()
if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
print('测试通过!')
else:
print('测试失败!')
2.
# -*- coding: utf-8 -*-
import
Difficulty?
循环变量时应再加一层函数使循环变量不直接被引用,同时用i作为每次循环的指针
注意外层函数返回的是内层函数还是使用内层中返回的参数
Addition:同层代码和return以及内层def同样缩进