函数有可见范围,这就是作用域的概念。
内部函数不能在外边直接使用,会抛出Nameerror异常。因为它不可见。
作用域
全局作用域
局部作用域
x = 5
def foo():
x+=1
foo()
x = 5
def foo():
global x
x += 1
print(X)
foo()
闭包
自由变量:未在本地作用域中定义的变量,例如定义在内存函数外的
外层函数的作用域中的变量
闭包:就是一个概念,出现在嵌套函数中,指的是内层函数引用到了外层函数的自由变量。就形成了闭包。
def foo():
c = [0]
def ine():
c[0] += 1 #在函数ine中的使用方式为c的元素修改值,而不是重新定义变量
return c[0]
return ine #ine是一个函数对象
f = foo() #f是一个函数对象
print(f())#调用函数foo
def counter():
count = 0
def inc():
nonlocal count
count += 1
return count
return inc
foo = counter()
print(foo())