2022年 11月 4日

python什么是函数对象_【Python3之函数对象】

函数对象

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

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

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

#!/usr/bin/env python

# -*- coding:utf-8 -*-

def foo():

print(‘from foo’)

foo()

print(id(foo))

print(type(foo))

print(foo)

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

from foo

4406808360

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

#!/usr/bin/env python

# -*- coding:utf-8 -*-

def foo():

print(‘from foo’)

foo()

func=foo #引用,赋值

print(foo)

print(func)

func()

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

from foo

from foo

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

def foo():

print(‘from foo’)

def bar(func):

print(func)

func()

bar(foo)

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

from foo

4.函数可以作返回值

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

def foo():

print(‘from foo’)

def bar(func):

return func

f=bar(foo)

print(f)

f()

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

from foo

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

def foo():

print(‘from foo’)

dic={‘func’:foo}

foo()

print(dic[‘func’])

dic[‘func’]()

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

from foo

from foo

6.函数还可以嵌套

函数嵌套的定义

48304ba5e6f9fe08f3fa1abda7d326ab.png

def f1():

def f2():

print(‘from f2’)

def f3():

print(‘from f3’)

f3()

f2()

f1()

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

from f2

from f3

应用

48304ba5e6f9fe08f3fa1abda7d326ab.png

def get(text):

def clean(t): #2

return t[1:]

new_text = clean(text) #1

return len(new_text)

print(get(‘python’))

48304ba5e6f9fe08f3fa1abda7d326ab.png

输出

5