函数的嵌套和作用域链
函数的嵌套调用
#函数的嵌套调用
def max2(x,y):
m = x if x>y else y
return m
def max4(a,b,c,d):
res1 = max2(a,b)
res2 = max2(res1,c)
res3 = max2(res2,d)
return res3
# max4(23,-7,31,11)
函数的嵌套定义
#函数的嵌套定义(一)
def f1():
print("in f1")
def f2():
print("in f2")
f2()
f1()
#函数的嵌套定义(一)
def f1():
def f2():
def f3():
print("in f3")
print("in f2")
f3()
print("in f1")
f2()
f1()
函数的作用域链
#作用域链(一)
def f1():
a = 1
def f2():
print(a)
f2()
f1()
#作用域链(二)
def f1():
a = 1
def f2():
def f3():
print(a)
f3()
f2()
f1()
#作用域链(三)
def f1():
a = 1
def f2():
a = 2
f2()
print('a in f1 : ',a)
f1()
nonlocal关键字
# 1.外部必须有这个变量
# 2.在内部函数声明nonlocal变量之前不能再出现同名变量
# 3.内部修改这个变量如果想在外部有这个变量的第一层函数中生效
#nonlocal关键字
def f1():
a = 1
def f2():
nonlocal a
a = 2
f2()
print('a in f1 : ',a)
f1()
函数名的本质
函数名本质上就是函数的内存地址
1.可以被引用
#函数被引用
def func():
print('in func')
f = func
print(f)
2.可以被当作容器类型的元素
#函数被当作容易类型的元素
def f1():
print('f1')
def f2():
print('f2')
def f3():
print('f3')
l = [f1,f2,f3]
d = {'f1':f1,'f2':f2,'f3':f3}
#调用
l[0]()
d['f2']()
3.可以当作函数的参数和返回值
*不明白?那就记住一句话,就当普通变量用
#第一类对象的概念
第一类对象(first-class object)指 1.可在运行期创建 2.可用作函数参数或返回值 3.可存入变量的实体。


浙公网安备 33010602011771号