Python——函数参数传递方式

函数参数传递与 Lambda 表达式

一、函数参数传递方式概览

Python 中函数的参数传递方式非常灵活,主要包括以下几种形式:

类型 说明 示例
位置参数 按参数顺序依次传入 func(1, 2)
关键字参数 按参数名传入,可与顺序无关 func(a=1, b=2)
默认参数 为参数提供默认值,可省略传参 def func(a, b=10)
可变位置参数 *args 接收任意数量的位置参数 def func(*args)
可变关键字参数 **kwargs 接收任意数量的关键字参数 def func(**kwargs)

二、参数传递详解

1. 位置参数

最常见的参数传递形式,按顺序依次赋值。

python 复制代码
def add(a, b):
    return a + b

print(add(3, 5))  # 输出 8

2. 关键字参数

通过参数名进行传递,顺序无关。

python 复制代码
def greet(name, msg):
    print(f"{msg}, {name}!")

greet(msg="Hello", name="Alice")

3. 默认参数

可以为部分参数设置默认值,调用时可以省略。

python 复制代码
def power(base, exp=2):
    return base ** exp

print(power(3))      # 9
print(power(3, 3))   # 27

注意:默认参数在定义时只计算一次,若默认值是可变对象(如 list、dict),可能引发意外行为。


4. 可变位置参数 *args

用于接收任意数量的位置参数,函数内会将它们打包成一个元组。

python 复制代码
def show(*args):
    print(args)

show(1, 2, 3, "hello")
# 输出:(1, 2, 3, 'hello')

5. 可变关键字参数 **kwargs

用于接收任意数量的关键字参数,函数内会将它们打包成一个字典。

python 复制代码
def show_info(**kwargs):
    print(kwargs)

show_info(name="Alice", age=25)
# 输出:{'name': 'Alice', 'age': 25}

6. 参数组合与顺序规则

函数定义时参数的顺序必须遵循:

复制代码
位置参数 → 默认参数 → *args → **kwargs

示例:

python 复制代码
def func(a, b=10, *args, **kwargs):
    print(a, b, args, kwargs)

三、参数的传递机制(重要)

Python 的参数传递机制可理解为:

"对象引用传递(传值与传址的结合体)"

即:

  • 如果传入的是可变对象(list, dict, set),函数内修改会影响原对象。
  • 如果是不可变对象(int, str, tuple),函数内修改不会影响原对象。
python 复制代码
def modify(x):
    x.append(100)

nums = [1, 2, 3]
modify(nums)
print(nums)  # [1, 2, 3, 100]

四、把函数作为参数

  • 基本用法:将函数名(不带 ())传入另一个函数,在被调用处使用它。

def apply_twice(func, x):

return func(func(x))

def add1(n):

return n + 1

print(apply_twice(add1, 3))


五、Lambda 表达式(匿名函数)

1. 基本语法

python 复制代码
lambda 参数列表: 表达式
  • 用于定义简短的匿名函数
  • 表达式执行结果即为返回值;
  • 适合在只使用一次的场景中(如排序、过滤)。

2. 示例

python 复制代码
add = lambda x, y: x + y
print(add(2, 3))  # 5

与普通函数等价:

python 复制代码
def add(x, y):
    return x + y
相关推荐
火车叼位几秒前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
BD_Marathon6 分钟前
设计模式——依赖倒转原则
java·开发语言·设计模式
火车叼位7 分钟前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
孤狼warrior18 分钟前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
devmoon25 分钟前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
Katecat9966328 分钟前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
Evand J28 分钟前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦29 分钟前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.32 分钟前
java抽象类和接口
java·开发语言
xyq202442 分钟前
Pandas 安装指南
开发语言