概述
1. 题目: 利用闭包返回一个计数器函数
1.1 解答一
利用全局变量的性质,python在函数中调用全局变量,注意得加上global,同时无论在那里修改,都会全局影响;代码如下:
s = 0 #设置全局变量
def createCounter():
def counter():
global s #引用全局变量
s = s+1
return s
return counter
# 测试:
counterB = createCounter()
if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
print('测试通过!')
else:
print('测试失败!')
1.2 解答二
这个解答是借鉴一位前辈的,其实思路很简单,但是我们一般想的就是在外层函数设一个变量s = 0 ,然后内层函数对s做修改,但是如果这样写的话,会报UnboundLocalError: local variable ‘s’ referenced before assignment 错误,也就是s已经被定义了。
def createCounter():
s = 0
def counter():
s += 1
return s
return counter
# 错误信息
# UnboundLocalError: local variable 's' referenced before assignment
这是因为在函数内部对变量赋值进行修改后,该变量就会被python解释器认为是局部变量而非全局变量,当程序执行到s += 1的时候,因为这条语句是给s赋值,所以s成为了局部变量,那么在执行s += 1的时候,因为s这个局部变量还没有定义,自然就会抛出这样的错误。
下面这种做法是将s
def createCounter():
s = [0]
def counter():
s[0] = s[0]+1
return s[0]
return counter
这种做法就很巧妙,s[0] = s[0]+1 这句代码并没有直接对s赋值,而是更改的s中的内容,所以自然就可行了。
最后
以上就是土豪鱼为你收集整理的利用闭包返回一个计数器函数,每次调用它返回递增整数——Python学习笔记的全部内容,希望文章能够帮你解决利用闭包返回一个计数器函数,每次调用它返回递增整数——Python学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复