首页 我的图书馆 个图VIP 联系客服

看到好文章,想保存怎么办!

下载APP
python函数嵌套笔记

2014-01-25

1 python支持嵌套函数;
2 内层函数可以访问外层函数中定义的变量,但不能重新赋值(rebind);
3 内层函数的local namespace不包含外层函数定义的变量(见下面的演示程序);
4 避免出现低版本(<=2.1)不支持nested scope问题的方法:在内层函数参数列表中使用默认参数:
(copied from "OReilly - Python in a Nutshell" section 4.10.6.2)
def make_adder_1(augend):             # works with any version    def add(addend, _augend=augend): return addend+_augend    return add
演示程序:
def outterfunc():
    def innerfunc():
        cc = bb+'2'
        print 'inner:',locals()
        # bb = 3 #这句会造成运行失败
    bb = '3'
    outer = 'out'
    innerfunc()
    print 'outter:',locals()
bb=31
outterfunc()
输出:
inner: {'cc': '32', 'bb': '3'}
outter: {'innerfunc': <function innerfunc at 0x01F0C1F0>, 'outer': 'out', 'bb': '3'}
从输出可以看到,外层函数里定义的outer变量没有出现在内层函数的local namespace里,但被引用的变量bb却出现了,这一特点值得注意。


关于函数内嵌函数作用域的笔记:

def test():    i=0    def a():        print locals()    a()    print i test()

这段,locals()的值为空,说明内嵌的a函数没有默认引入i

def test():    i=0    def a():        print locals()        print i    a()    print i test()

这段,locals()有了i的字典,说明解释器自动引入了i

def test():    i=0    def a():        i+=1        print locals()        print i    a()    print i test()

这段出错,提示i引用在了i声明之前

内部函数可以引用外部函数变量,暂时没找到修改外部函数变量值方法

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,可拔打24小时举报电话4000070609 或 在线举报
来自:xf_baby  > Python编程
举报
[荐]  原创奖励计划来了,万元大奖等你拿!
猜你喜欢
类似文章
Python征途--嵌套函数/嵌套作用域/闭包
python基础
python函数的私有属性 方法
python全局变量
转:Python之全局变量
Python中变量的作用域
更多类似文章 >>
生活服务
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击右上角三个点联系客服!