直接回答:"函数是一等公民"指函数和数字、字符串等普通值拥有同等地位:可以赋值给变量、作为参数传递、作为返回值返回、存进列表或字典、在运行时动态创建。Python、JavaScript 都满足这一特性。

展开解析

def greet(name):
    return f"hello, {name}"

f = greet                    # 赋值给变量
handlers = {"greet": greet}  # 存入数据结构
def apply(fn, x):            # 作为参数
    return fn(x)

为什么重要:它是高阶函数、装饰器、回调、闭包等一切函数式设施的前提。具体收益——

  • 行为可以参数化:策略模式不再需要建一堆类,传个函数即可(如 sorted(key=...));
  • 框架可以回调用户代码:事件处理、WSGI、中间件都依赖"函数能当参数";
  • 抽象层级提升:代码操作的对象从数据上升到"计算本身",复用能力更强。

对比:Java 8 之前函数不是一等公民,只能用匿名内部类模拟,冗长繁琐;引入 lambda(函数式接口)后才补上这一课。追问:Python 函数对象的属性(__name____defaults__)、一等函数与闭包的关系。