加载顺序:
内置–全局(文件打开后执行时从上到下加载)–局部(函数调用时加载)
内置命名空间在解释运行时加载,当解释器解释执行文件时加载全局命名空间,当执行文件某个函数时加载函数的局部命名空间。
作用域的作用:为了函数内的变量不会影响到全局
作用域链
x = 1
def fun():
x = 11
def inner():
x = 111
def inner2():
x = 1111
print(x)
inner2()
inner()
fun()
def animal():
def dog():
print('bark')
print('eat')
dog()
animal()
其中的dog函数叫内部函数,为了保护这个函数将这个dog函数放进animal函数
def hei():
x = 20
def inner():
"""
闭包函数
"""
print(x)
闭包函数的常用形式
def hei():
x = 20
def inner():
"""
闭包函数
"""
print(x)
return inner
i = hei()
i()
返回cell则为闭包函数,返回None则不是闭包函数
函数名本质上也是一个变量,是一块内存地址。
def func():
print('func')
print(func)
f = func
print(f)
f()
l = [f]
l[0]()
# 作为参数传递
def fun():
print('function')
def fun2(f):
print(f)
print('function2')
fun2(fun)
# 作为函数返回值
def fun():
print('function')
def fun2(f):
print('function2')
return f
fu = fun2(fun)
print(fu)
fun()
fu()
def fun3():
def fun():
print('function')
return fun
fun()()