在Python 中函数也是对象,可以把函数分配给变量,把函数存储在数据结构中,作为参数传递给其他函数,甚至作为函数的返回值。
def hello() :
print("Hello World!")
say = hello
say()
如上述代码中,我可以将hello函数作为对象赋值给变量say , 然后你就可以像普通函数调用一样去调用say。
如果我们删掉原来的hello函数,是否可以继续调用say函数对象呢?
def hello() :
print("Hello World!")
say = hello
del hello
say()
答案是肯定的,函数对象及其名称是相互独立的实体。
由于函数是对象,因此还可以将函数作为参数传递给其他函数。
def hello(hi) :
o = hi + " Hello World!"
return o
def aomi(func) :
say = func("alex")
print(say)
aomi(hello)
结果:
alex Hello World!
Process finished with exit code 0
将函数对象作为参数传递给其他函数的功能非常的强大,可以用来将程序中的行为抽象出来并传递出去。
能接受其他函数作为参数的函数被称为高阶函数。高阶函数是函数式编程风格中必不可少的一部分。Python中具有代表性的高阶函数是内置的map函数。map函数接收一个函数对象和一个可迭代的对象,然后在可迭代对象中的每一个元素上调用该函数来生成结果。
def hello(hi) :
o = hi + " Hello World!"
return o
print(list(map(hello, ['alex','mark','tom'])))
结果:
['alex Hello World!', 'mark Hello World!', 'tom Hello World!']
Process finished with exit code 0
可以看出,map遍历了真个列表并将hello函数应用于每一个元素。所以得到一个新的列表对象。