# 作用域
# 一个标识符的可见范围,就是整个标识符的作用域
# python的作用域 有其特点。别的语言未必适用。
# a = 99 # a 的作用域 为全局作用域
# def bar():
# print(a)
# bar()
# def foo():
# b = 10 #局部作用域
# print(b) # name 'b' is not defined 找不到b
# def foo2():
# b = 10 #局部作用域
# print(b)
# foo2()
# a = 1000 #向内穿透的机制
# def foo2():
# # print(a)
# # b = 10 #局部作用域
# print(c) # name 'c' is not defined
# def foo3():
# c = 2000
# print(a)
# # print(b)
# return foo3
# foo2()()
a = 1000 #向内穿透的机制 #**************************************
# def foo2():
# # print(a)
# # b = 10 #局部作用域
# # name 'c' is not defined
# def foo3():
# c = 2000
# # print(a)
# # print(b)
# print(c) #name 'c' is not defined
# foo3()
# foo2()
# for i in range(10): #全局作用域 i
# pass
# print(i)
# for i in range(10): #全局作用域 i 不要以为i 只作用域 :后面,它是个全局变量。
# for k in range(20): # 所以, 在同一个作用于里, 如果还要遍历的时候 要起不同的名字
# pass
# print(i , k)
# def foo5():
# print("foo5()", i, k)
# foo5()
# ------------柯里化---------------------
# def add(x, y):
# return x +y
# add(1,3)
# def add_c(a):
# def _foo(b):
# return a + b
# return _foo
# s = add_c(1)(3)
# print(s)
# def add_c2(a, b):
# def _foo(c):
# return a + b +c
# return _foo
# s2 = add_c2(1,3)(4)
# print(s2)
# 嵌套函数 不宜嵌套过深。 可读性会变差
# def add_c2(a, b):
# def _foo(c):
# def _foo(c):
# def _foo(c):
# def _foo(c):
# def _foo(c):
# def _foo(c):
# pass
# LEGB
# L local 本地(函数) a
# E 上层函数的本地作用域
# G global 全局
# B Build-in 内置
# 从上到下, 如果没找到 a , 就会报错
# def bar():
# def _inner():
# print(a)