• 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)按照索引的方式返回闭包的值
  • 相关阅读:
    Windows下Java File对象创建文件夹时的一个"坑"
    java.util.zip.ZipOutputStream压缩无乱码(原创)
    d指针在Qt上的应用及实现
    Java实现 蓝桥杯 算法提高 最大乘积
    Java实现 蓝桥杯 算法训练 p1103
    Java实现 蓝桥杯 算法训练 p1103
    Java蓝桥杯 算法训练 复数归一化
    Java蓝桥杯 算法训练 复数归一化
    Java实现 蓝桥杯 算法提高 最大乘积
    Java实现 蓝桥杯 算法提高 最大乘积
  • 原文地址:https://www.cnblogs.com/xuyuanyuan123/p/6685511.html
Copyright © 2020-2023  润新知