我是靠谱客的博主 土豪鱼,最近开发中收集的这篇文章主要介绍利用闭包返回一个计数器函数,每次调用它返回递增整数——Python学习笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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学习笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部