zoukankan      html  css  js  c++  java
  • 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)按照索引的方式返回闭包的值
  • 相关阅读:
    js获取当前页面url网址等信息
    jQuery 复选框全选/取消全选/反选
    js获取日期实例之昨天今天和明天、后天
    mysql不重启修改参数变量
    php 读取功能分割大文件实例详解
    php批量删除数据库下指定前缀的表
    PHP遍历目录返回统计目录大小实例
    PHP二维数组如何根据某个字段排序
    PHP 如何获取二维数组中某个key的集合(高性能查找)
    jQuery 隐藏与显示 input 默认值
  • 原文地址:https://www.cnblogs.com/xuyuanyuan123/p/6685511.html
Copyright © 2011-2022 走看看