Discuss / Python / 返回函数

返回函数

Topic source

INVINCIBLEwyq

#1 Created at ... [Delete] [Delete and Lock User]

错误示例:不能这么写,因为内部函数不能改变外部函数中变量的指向

def createCounter():
    a = 0
    def counter():
        a = a+1
        return a
    return counter

法1:使用list可以回避这个问题,修改list中的值,并未改变list的指向。

def createCounter():
    L = [0]
    def counter():
        L[0] = L[0]+1
        return L[0]
    return counter

法2:还可以在内部函数中声明变量为nonlocal,让内部函数获得修改权

def createCounter():
    a = 0
    def counter():
        nonlocal a
        a = a+1
        return a
    return counter

感谢解释!

总结的很好!感谢!

queshi

Hannibal2077

#5 Created at ... [Delete] [Delete and Lock User]

请问为什么每次运行createCounter()的时候L不会被重新赋值为[0],而是按照上一轮内置函数的返回值来计算

___iFancy

#6 Created at ... [Delete] [Delete and Lock User]

好问题 蹲个答案

法2运行我写的,为什么会是测试通过,明明不对等啊

if[counterB(), counterB(), counterB(), counterB()]==[1,2,3,4,5]:

    print('测试通过!')

else:

    print('测试通过!')

写错了,我写了两个测试通过

“使用list可以回避这个问题”,妙啊!

南小i

#10 Created at ... [Delete] [Delete and Lock User]

回复#5

因为测试代码里每次运行的是

createCounter()()

不是

createCounter()

新的楼层有解释


  • 1

Reply