'''
在函数中,Python会按照以下顺序,在各个作用域的命名空间中寻找变量:
1.函数局部作用域(Local Function Scope);
2.闭包作用域(Enclosing Scope);
3.全局作用域(Global Scope);
4.内置作用域(Built-in Scope)。
如果有重名的变量,局部优先于闭包,闭包优先于全局,全局优先于内置。
'''
#1.函数局部作用域只能在函数里面用,在函数外面调用,不起作用
def foo(a,b):
c = 1
return a+b+c
c1 = 1
def fool(a,b):
return a+b+1
#对于一个全局变量,如果我们在函数内部对他重新赋值,它会被认为是一个局部变量
c2 = 1#全局变量
def foo2(a,b):
c2 = 2#局部变量
return a+b+c2
print(foo2(1,1))#4
print(c2)#1
# 2.全局作用域:如果想在函数中对全局变量重新赋值,可以使用关键字global
c3 = 1
def foo3(a,b):
global c3
c3 = 2 #全局变量c在函数中,被重新赋值
return a+b+c3
f = foo3(1,1)
print(f) #4
print('c3:%d'%c3)
#3.内置作用域:存储内置函数或对象的作用域
import builtins
b = len is builtins.len
print(b)
#4.闭包作用域:既不在在函数inner()的函数局部作用域中,也不在全局作用域中,而是于两者之间的作用域
def outer():
a = 1
def inner():
return a
return inner
f = outer()
result = f()
print(result) # 输出结果:1



