• python函数对象和闭包


    关于函数对象和闭包

    闭包(closure)是函数式编程的重要的语法结构。不同的语言实现闭包的方式不同。Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看到Python使用对象来实现一些特殊的语法)。Python一切皆对象,函数这一语法结构也是一个对象。在函数对象中,我们像使用一个普通对象一样使用函数对象,比如更改函数对象的名字,或者将函数对象作为参数进行传递。

    一、函数对象:

    1、函数可以当参数传递

    示例:

    #把函数当成参数传递
    def foo():#定义foo函数
        print('foo')
    def bar(foo):
        print(foo)#打印foo的内存地址
        foo()#调用foo函数
    
    bar(foo)
    

    执行结果是:

    <function foo at 0x00000000022EB8C8>
    foo
    

      

    2、函数可以被赋值

    示例:

    def foo():#定义foo函数
        print('foo')
    print(foo)#输出foo的内存地址
    
    f=foo
    print(f)
    f()#即foo()执行foo函数
    

     执行结果是:

    <function foo at 0x00000000003F3E18>
    <function foo at 0x00000000003F3E18>
    foo
    

      

    3、把函数当成返回值

    示例:

    # 把函数当成返回值
    def foo():#定义foo函数
        print('foo')
    def bar(foo):
        print(foo)
        return foo#将foo作为返回值
    f=bar(foo)
    print(f)
    f()
    

    执行结果是:

    <function foo at 0x0000000001FBB8C8>
    <function foo at 0x0000000001FBB8C8>
    foo  

    4、把函数当做容器类型变量(将函数当做容器类型变量,可随时在主轴线上调用)

    示例:

    def tell_msg():
        msg='''
        search:查询
        add:添加
        delete:删除
        change:修改
        create:新建
        '''
        print(msg)

    二、闭包:(定义到内部的函数包括对外部作用域的引用,不包括对全局作用域的引用)

    判断是否为闭包:

    print(f.__closure__),返回值为none的话,则表示不是闭包
    print(f.__closure__[0].cell_contents)按照索引的方式返回闭包的值
    print(f.__closure__[1].cell_contents)按照索引的方式返回闭包的值
  • 相关阅读:
    sed命令:删除匹配行和替换
    使用git rebase合并多次commit
    解决flask中文乱码的问题
    PyCharm 2017: Remote debugging using remote interpreter doesn't work
    ansible小结(八)ansible-playbook简单使用
    ansible命令参数介绍
    eclipse 代码自动提示
    oracle start with connect by prior 递归查询
    Android九宫图(draw9patch)
    Android 通过按钮弹出系统菜单(通过Button显示菜单)转
  • 原文地址:https://www.cnblogs.com/xuyuanyuan123/p/6685511.html
Copyright © 2020-2023  润新知