大鹏

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

函数的嵌套和作用域链

  函数的嵌套调用

复制代码
#函数的嵌套调用
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.可存入变量的实体。
posted on 2018-12-28 21:38  pf42280  阅读(117)  评论(0)    收藏  举报