打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python函数嵌套笔记
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声明之前

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
接口测试基础——第7篇 简单的Python知识普及(二)之装饰器
Python征途--嵌套函数/嵌套作用域/闭包
python基础
5分钟掌握Python闭包
python函数的私有属性 方法
Python入门常识【入门必学】
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服