python函数的本质是对象

概述

在python中,一切都是对象,函数(Function)也是对象,并且是第一类对象(First-Class Object)

python第一类对象的特性

上面的部分特性在高阶函数中介绍

函数身为一个对象,拥有对象模型的三个通用属性:id、类型、和值
def test():
    print('测试')

test()

#打印函数对象的内存地址
print(id(test))
#打印函数对象的类型
print(type(test))
#打印函数所在的内存地址
print(test)
#显示函数对象的属性
print(dir(test))

函数的本质

例子:

def test():
    print("测试")

查看函数的类型

print(type(test))

打印结果是<class 'function'>,是特殊的类对象

查看函数的属性

print(dir(test))

打印出所有属性,如__name__

查看函数的名字

print(test.__name__)

查看函数的内存地址

print(test)

print(id(test))

打印出函数在内存中的地址

test和test()的区别

  1. 函数名,不带小括号,表示 函数对象
  2. 函数名(),带小括号,表示 执行函数

将函数赋值给变量

#注意,此处是函数名,后面不要加小括号,test()表示执行函数
a=test 
print(a)

打印出函数在内存中的地址,变量a指向test()函数的地址

内存地址相同

print(id(test)==id(a))

通过变量名可以调用函数

a()

因为变量a指向函数test(),所以a()就表示调用函数,执行结果同test()

通过变量a查看函数名

print(a.__name__)

结果是test

注意
变量a指向test()函数,所以函数名仍然是test

给test方法名赋值

test=1

调用test()函数,会报错,如下

test()

通过变量a调用函数,能够正确执行,如下:

a()

打印函数名字

print(a.__name__)

显示为:test

内存模型

类中的__call__()方法

参见
https://www.malaoshi.top/show_1EF2Lp3VClWB.html

练习

将函数对象放入到list中

def test():
    print("test")

def test2():
    print("test2")

def test3():
    print("test3")

练习:将函数对象放入list中

l=[test,test2,test3]

练习:遍历执行放入list中的函数

for item in l:
    item()

原文出处:/show_1EF2JKR82kl6.html