文章目录
第五章 一等函数
“一等对象”被定义为满足下述条件的程序实体:
- 在运行时创建
- 能赋值给变量或者数据结构中的元素
- 能作为参数传给函数
- 能作为函数的返回结果
在Python中,所有的函数都是一等对象。
5.1 把函数视作对象
>>> def f(n):
... '''return n!'''
... return 1 if n<2 else n *f(n-1)
...
>>> f(4)
24
>>> type(f)
<class 'function'>
>>> f.__doc__
'return n!'
>>>
这是一个控制台会话,因此我们是在“运行时”创建一个函数。
__doc__属性用于生成对象的帮助文档:
>>> help(f)
Help on function f in module __main__:
f(n)
return n!
可以把f函数赋值给变量fact,然后通过变量名调用。还能把它作为参数传给map函数。map函数返回一个可迭代对象,里面的元素是把第一个参数(一个函数)应用到第二个参数(一个可迭代对象)中各个元素上得到的结果。
>>> fact = f
>>> fact(5)
120
>>> map(f, range(5))
<map object at 0x055BDB38>
>>> list(map(fact, range(5)))
[1, 1, 2, 6, 24]
>>> list(map(f, range(5)))
[1, 1, 2, 6, 24]
5.2 高阶函数
接受函数为参数,或者把函数作为结果返回的函数就是高阶函数。
>>> def reverse(words):
... return words[::-1]
...
>>> reverse('hello')
'olleh'
>>> names = ['Recent', 'Joey', 'Emma', 'Dagan']
>>> sorted(names, key=reverse)
['Emma',