• 【Python3之函数对象】


    函数对象

    函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性。

    那到底什么是第一类对象(First-Class Object)呢?

    在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

    1.函数身为一个对象,拥有对象模型的三个通用属性:id、类型、和值。

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    def foo():
        print('from foo')
    foo()
    
    print(id(foo))
    print(type(foo))
    print(foo)
    复制代码

    输出

    from foo
    4406808360
    <class 'function'>
    <function foo at 0x106aa8f28>

    2.函数可以被引用,即函数可以赋值给一个变量

    还可以把该函数赋值给更多的变量,唯一变化的是该函数对象的引用计数不断地增加,本质上这些变量最终指向的都是同一个函数对象。

    复制代码
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    def foo():
        print('from foo')
    
    foo()
    func=foo    #引用,赋值
    print(foo)
    print(func)
    func()
    复制代码

    输出

    from foo
    <function foo at 0x10eed8f28>
    <function foo at 0x10eed8f28>
    from foo

    3.函数可以当做参数传递

    复制代码
    def foo():
        print('from foo')
    
    def bar(func):
        print(func)
        func()
    
    bar(foo)
    复制代码

    输出

    <function foo at 0x1047eff28>
    from foo

    4.函数可以作返回值

    函数接受一个或多个函数作为输入或者函数输出(返回)的值是函数时,我们称这样的函数为高阶函数

    复制代码
    def foo():
        print('from foo')
    
    def bar(func):
        return func     
    
    f=bar(foo)
    
    print(f)
    
    f()
    复制代码

    输出

    <function foo at 0x107f29f28>
    from foo

    5.函数可以当作容器类型的元素

    容器对象(list、dict、set等)中可以存放任何对象,包括整数、字符串,函数也可以作存放到容器对象中

    复制代码
    def foo():
        print('from foo')
    dic={'func':foo}
    
    foo()
    
    print(dic['func'])
    
    dic['func']()
    复制代码

    输出

    from foo
    <function foo at 0x10997ef28>
    from foo

    6.函数还可以嵌套

    函数嵌套的定义

    复制代码
    def f1():
    
        def f2():
            print('from f2')
            def f3():
                print('from f3')
            f3()
        f2()
    
    
    f1()
    复制代码

    输出

    from f2
    from f3

    应用

    复制代码
    def get(text):
        def clean(t):   #2
            return t[1:]
        new_text = clean(text)  #1
        return len(new_text)
    
    print(get('python'))
    复制代码

    输出

    5

  • 相关阅读:
    TortoiseGit 的下载与安装
    CountDownLatch在多线程程序中的应用
    IDEA中maven的依赖jar包报红
    监控中的TP50
    BeanUtils.copyProperties方法,当属性Date为null解决
    SimpleDateFormat的安全问题解决方法
    java修饰符用法
    java实现快速排序
    京东2016实习生编程题—生日礼物
    美图笔试算法题(两个人拿石头判断输赢)
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7097946.html
Copyright © 2020-2023  润新知