如果在一个函数中,定义了另外一个函数,并且那个函数使用了外面函数的变量,并且外面那个函数返回了里面这个函数的引用,那么称为里面的这个函数为闭包。例如:
def greet(name): def say_hello(): print('hello my name is %s' % name) return say_hello如果想要在闭包中修改外面函数的变量,这时候应该使用nonlocal关键字,来把这个变量标识为外面函数的变量: 以下代码修改了name,但没有使用nonlocal关键字,会报错:
def greet(name): def say_hello(): name += 'hello' print('hello my name is %s' % name) return say_hello以下代码修改了name,使用了nonlocal关键字,不会报错:
def greet(name): def say_hello(): nonlocal name name += 'hello' print('hello my name is %s' % name) return say_hello