Python函数的核心原理是“函数即对象”,使其可赋值、传参、嵌套、返回及动态生成;结合闭包与装饰器实现高阶功能,支持函数式编程重构。
Python函数的核心原理,关键不在语法多复杂,而在于理解“函数即对象”这一底层逻辑。它决定了函数能被赋值、传参、嵌套、返回,甚至动态生成——所有高级用法都从这里长出来。
在Python中,函数和字符串、列表一样,是实实在在的对象。你可以把它赋给变量、放进列表、作为参数传给另一个函数,也能作为返回值。
my_print = print,之后 my_print("hello") 和 print("hello") 效果一样def run(func, x): return func(x),调用 run(len, "abc") 返回 3
函数执行时,会形成自己的局部作用域;当内部函数引用了外部函数的变量,并被返回出去,就构成了闭包——那个变量会被“打包带走”,不会随外部函数结束而销毁。
make_adder(n) 返回一个加 n 的函数,每次调用都保留各自的 n
func.__closure__ 不为 None,且 func.__closure__[0
].cell_contents 可查看捕获的值装饰器不是语法糖,而是高阶函数 + 闭包的组合应用。@decorator 等价于 func = decorator(func),核心是“不改原函数代码,却改变其行为”。
@functools.wraps(func) 保持原函数的 __name__、__doc__ 等元信息比如处理一批用户数据,需要过滤、转换、聚合。不用for循环堆砌,而是用 map、filter、reduce 或更自然的生成器表达式 + 高阶函数组合。
sum(map(lambda u: u['score'] * 1.2, filter(lambda u: u['active'], users)))