【Python的函数对象】,,函数对象函数(Fun


函数对象

函数(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 foo4406808360<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 f2from f3

应用

def get(text):    def clean(t):   #2        return t[1:]    new_text = clean(text)  #1    return len(new_text)print(get(‘python‘))

输出

5

【Python的函数对象】

评论关闭