--1. 函数参数与高阶函数)
三、 函数、类与面向对象编程 (OOP)标题函数参数与高阶函数装饰器与闭包面向对象三大特征类、对象与魔术方法异常处理结论先行这 6 个问题本质上都围绕一个核心Python 把函数当作一等对象由此衍生出灵活的参数机制和以函数为参数/返回值的高阶函数体系。1. 函数参数类型与规则Python 函数参数主要有 5 类定义时需按固定顺序排列位置参数必传按位置匹配默认参数可省略有默认值可变位置参数*args收集多余位置参数关键字参数用keyvalue传入可变关键字参数**kwargs收集多余关键字参数规则顺序位置参数 → 默认参数 → *args → 关键字参数 → **kwargs。例如def f(a, b2, *args, c, **kwargs): pass其中c是仅限关键字参数在*args之后必须用关键字传入。2.*args与**kwargs的区别*args把多余的位置参数打包成一个元组tuple**kwargs把多余的关键字参数打包成一个字典dictdef demo(*args, **kwargs): print(args) # (1, 2, 3) print(kwargs) # {x: 1, y: 2} demo(1, 2, 3, x1, y2)口诀一颗星收位置成元组两颗星收关键字成字典。⭐3. lambda 表达式lambda 是匿名函数的简写语法为lambda 参数: 表达式square lambda x: x ** 2 print(square(5)) # 25限制只能写单个表达式不能包含语句如if-else块、for、赋值但可用条件表达式。常用于临时、简短的函数场景尤其配合map、sorted、filter等高阶函数。⚡4. 函数传参会不会改变参数本身结论取决于参数是可变对象还是不可变对象。Python 是对象引用传递传的是引用不是值也不是纯引用。类型示例函数内修改的影响不可变对象int、str、tuple重新绑定新对象不影响原变量可变对象list、dict、set原地修改会影响外部但重新赋值则不影响def modify(lst): lst.append(4) # 原地修改 → 外部列表变化 a [1, 2, 3] modify(a) print(a) # [1, 2, 3, 4]关键区分lst.append()原地改vslst [...]重新绑定外部无感。5. map 和 reduce 的用法map对可迭代对象逐元素应用函数返回迭代器。nums [1, 2, 3] squared list(map(lambda x: x**2, nums)) # [1, 4, 9]reduce对序列累计计算把多个值归约成一个值Python3 中需从functools导入。from functools import reduce product reduce(lambda x, y: x * y, [1, 2, 3, 4]) # 24对比map是一对一映射reduce是多对一归约。6. 高阶函数的原理高阶函数指满足以下任一条件的函数接受一个或多个函数作为参数返回一个函数作为结果其根本前提是Python 函数是一等对象first-class object可被赋值、传参、返回。def apply(f, x): # 接收函数 f return f(x) apply(lambda x: x 1, 10) # 11map、reduce、filter、sorted(key...)都是高阶函数的典型实例。这些内容的联系它们构成一条完整的逻辑链具体而言函数是一等对象是总纲——没有它就没有高阶函数lambda 也就无法作为值传递。参数规则定义了函数如何接收数据而*args/**kwargs是这套规则的灵活扩展让函数能处理任意参数。传参机制可变 vs 不可变是参数行为的底层规则解释了为什么有时改了有时没改。lambda提供轻量级的函数对象是喂给高阶函数最常用的原料。map/reduce是高阶函数的典型应用它们接收函数常是 lambda并作用在数据上。一句话串联参数机制负责把数据/函数送进函数高阶函数负责用函数处理数据lambda 则是临时造函数的工具三者共同支撑 Python 函数式编程能力。