一等函数
在Python中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:
- 在运行时创建
- 能赋值给变量或数据结构中的元素
- 能作为参数传递给函数
- 能作为函数的返回结果
在Python中,整数、字符串和字典都是一等对象
把函数视作对象
Python函数是对象
# 创建并测试一个函数,然后读取它的__doc__属性,再检查它的类型
def factorial(n): # 这是一个控制台会话,因此是在运行时创建一个函数
'''return n!'''
return 1 if n < 2 else n * factorial(n - 1)
factorial(42)
1405006117752879898543142606244511569936384000000000
factorial.__doc__ # __doc__是函数对象众多属性中的一个
'return n!'
type(factorial) # factorial是function类的实例
function
也可以把factorial函数赋值给变量fact,然后通过函数名调用。还能把它作为参数传递给map函数。map函数返回一个可迭代对象,里面的元素是把第一个参数(一个函数)应用到第二个参数(一个可迭代对象,这里是range(11))中各个元素上得到的结果
fact = factorial
fact
<function __main__.factorial(n)>
fact(5)
120
map(fact, range(11))
<map at 0x1fe0f9adb80>
list(map(fact, range(11)))
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
有了一等函数,就可以使用函数式风格编程。函数式编程的特点之一是使用高阶函数。