直接回答:"函数是一等公民"指函数和数字、字符串等普通值拥有同等地位:可以赋值给变量、作为参数传递、作为返回值返回、存进列表或字典、在运行时动态创建。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__)、一等函数与闭包的关系。