Discuss / Python / 懵逼了,希望大佬指点

懵逼了,希望大佬指点

Topic source
def createCounter():
	s=[0]
	def counter():
		s[0]+=1
		return s[0]
	return counter
def createCounter():
	s=0
	def counter():
		s+=1
		return s
	return counter

为什么第二种方式会报错

第二种在执行counter()函数时,python将等号左边的s视为局部变量,在函数执行的时候就会在counter内寻找等号右边的s的值,由于闭包将外部函数的s = 0屏蔽掉,所以就找不到s的赋值,因此报错,在地中方法中list的值不是放在栈里,所以不会被屏蔽

飞页快刀

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

def createCounter():

    s=0

    def counter():

        nonlocal s

        s+=1

        return s

    return counter

需要使用nonlocal才可以改变s,否则只能调用s=0,不能改值。


  • 1

Reply