Python函数参数传递方式详解与实战

陈默
陈默
发布时间:2026-10-12| 2人浏览过
原创

Python 函数参数传递支持多种灵活形式,包括位置参数、默认参数、可变位置参数(*args)及可变关键字参数(**kwargs)。本文梳理各类参数的定义格式、调用顺序与常见陷阱,配合完整代码示例与运行结果说明,帮助开发者准确掌握参数匹配逻辑,避免语法错误。

Python 函数参数传递核心规则

在 Python 中定义函数时,参数类型决定了实参传入时的解析优先级与接收格式。掌握四类核心参数(位置参数、默认参数、*args、**kwargs)的定义规则与调用限制,是编写健壮函数的基础。

第1步:定义位置参数与默认参数

位置参数是最基础的传参方式,调用时必须按形参定义的顺序严格提供对应数量的实参。若希望部分参数具备灵活性,可为其设置默认值。带有默认值的参数称为默认参数,调用时若不传值则自动启用预设状态。

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    print(f"-- This parrot wouldn't {action}")
    print(f"If you put {voltage} volts through it.")
    print(f"-- Lovely plumage, the {type}")
    print(f"-- It's {state}!")

# 调用示例:仅传必需的位置参数,其余走默认值
parrot(1000)

# 调用示例:全部以键值对形式覆盖默认参数
parrot(voltage=1000000, action='VOOOOOM', state='pushing up the daisies')

注意:在定义函数时,所有不带默认值的参数必须排在带默认值的参数之前,否则解释器会报错。

第2步:处理不定长位置参数(*args)

当调用函数时传入的参数数量不固定,可使用星号 *args 接收。该语法会将多余的位置实参自动打包为一个元组(tuple),在函数体内可按索引或遍历方式处理任意数量的数值或对象。

def sum_values(*args):
    total = sum(args)
    print(total)

sum_values(1, 2, 3)  # 输出:6
sum_values()         # 输出:0

*args 必须位于普通位置参数之后,且在 **kwargs 之前。调用时只需直接列出元素即可,无需显式声明结构。

第3步:处理不定长关键字参数(**kwargs)

若希望函数接受任意数量的命名参数,可使用双星号 **kwargs。它会将所有未匹配的前置形参作为键值对打包为字典(dictionary),便于动态配置参数。

def show_info(**kwargs):
    print(kwargs)

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

获取特定字段时建议使用 .get() 方法防止 KeyError,如 print(kwargs.get('age'))。当参数未提供时将返回 None,提升代码容错率。

参数混合调用的优先级与注意事项

Python 解析函数调用时的实参顺序有严格约束。正确排列参数组合可避免 SyntaxError:

  1. 位置实参必须排在关键字实参前面:例如 parrot(1000, voltage=500) 会报错,因为重复传值且顺序颠倒。正确的混合调用应为 parrot(1000, state='active')。
  2. 定义顺序固定:形参定义的标准范式为 def func(pos_args, *args, kwargs_only_arg, **kwargs):。其中 *args 收集剩余位置参数,**kwargs 收集剩余关键字参数,两者均放在最后且 **kwargs 必须置于 *args 之后。
  3. 默认参数不可变对象陷阱:若默认值为列表或字典,多次调用会共享同一内存引用。建议改用 None 并在内部初始化。
# 推荐的安全默认值写法
def append_item(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst

总结

通过合理组合位置参数、默认参数、*args 与 **kwargs,Python 函数可以优雅地适配单输入、多输入及动态配置等多种场景。严格遵守“位置在前、关键字在后”、“定义时默认值靠右”、“可变参数放末尾”的原则,即可彻底避开参数解析冲突。以上就是Python函数参数传递方式的详细内容,更多关于Python基础语法与实战技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。