把函数视为对象

在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满
足下述条件的程序实体:

  • 在运行时创建
  • 能赋值给变量或数据结构中的元素
  • 能作为参数传给函数
  • 能作为函数的返回结果

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

看看下面两个示例:

  1. 创建一个函数,并读取它的__doc__属性,再检查它的类型.
  2. 通过别的名称实用函数,再把函数作为参数传递.

# 案例1
In [20]: def factorial(n):
    ...:     """return n!"""
    ...:     return 1 if n<2 else n*factorial(n-1)
    ...:

In [21]: factorial(12)
Out[21]: 479001600
# 获取对象属性
In [22]: factorial.__doc__
Out[22]: 'return n!'
# function类
In [23]: type(factorial)
Out[23]: function

# 案例2
In [24]: fact = factorial

In [25]: fact
Out[25]: <function __main__.factorial(n)>

In [26]: fact(5)
Out[26]: 120

In [27]: map(factorial, range(10))
Out[27]: <map at 0x7f9c08954e80>

In [28]: list(map(factorial, range(10)))
Out[28]: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]

上面两个案例,表现出对象的行为.

  • 获取对象属性
  • 查看对象的类
  • 把对象当作参数
  • 对象当作返回值
上一篇:递归


下一篇:阶乘