概述
在python中,一切都是对象,函数(Function)也是对象,并且是第一类对象(First-Class Object)
上面的部分特性在高阶函数中介绍
函数身为一个对象,拥有对象模型的三个通用属性: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()的区别
- 函数名,不带小括号,表示 函数对象
- 函数名(),带小括号,表示 执行函数
将函数赋值给变量
#注意,此处是函数名,后面不要加小括号,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()


