Python学习——函数参数详解

Python中的函数参数传递机制允许多种灵活的参数类型,可以根据需求灵活配置参数,这使得函数具有更强大的扩展性和适应性。以下是对各类参数类型的详细说明:

1. 定义函数的不同参数类型

1.1 位置参数
  • 定义方式:def func(a, b=2)

  • 特点:

    • 必须按顺序传递,否则会抛出TypeError
    • 缺少时使用默认值。
  • 示例:

    python 复制代码
    def func(a, b=2):
        print(f"a={a}, b={b}")
    • func(1) → a=1, b=2
    • func(1,3) → a=1, b=3
1.2 可变参数(*args)
  • 定义方式:def func(*args)

  • 特点:

    • 接收所有未命名的位置参数,存储为元组。
    • 适用于接受任意数量位置参数的情况。
  • 示例:

    python 复制代码
    def func(*args):
        print(f"args={args}")
    • func(1,2,3) → args=(1,2,3)
    • func() → args=()
1.3 关键字参数(**kwargs)
  • 定义方式:def func(c=4, **kwargs)

  • 特点:

    • 接收所有未命名的关键字参数,存储为字典。
    • 适用于需要传递可变数量的关键字参数的情况。
  • 示例:

    python 复制代码
    def func(c=4, **kwargs):
        print(f"c={c}, kwargs={kwargs}")
    • func(key1=1) → c=4, kwargs={'key1':1}
    • func(key2=2, key3=3) → c=4, kwargs={'key2':2, 'key3':3}
1.4 混合参数
  • 可以在同一个函数中混合使用位置、默认、可变和关键字参数。

  • 示例:

    python 复制代码
    def func(a, b=2, *args, c=4, **kwargs):
        print(f"a={a}, b={b}, args={args}, c={c}, kwargs={kwargs}")
    • func(10) → a=10, b=2, args=(), c=4, kwargs={}
    • func(10,5,6,7) → a=10, b=5, args=(6,7), c=4, kwargs={}
    • func(10, key1=1) → a=10, b=2, args=(), c=4, kwargs={'key1':1}
    • func(10, key1=1, key2=2) → a=10, b=2, args=(), c=4, kwargs={'key1':1, 'key2':2}

2. 参数传递的处理流程

  • 步骤一:匹配位置参数

    • 首先,尝试将提供的位置参数与定义中的位置参数对应。如果没有足够的参数且缺少默认值,则抛出错误。
  • 步骤二:收集可变参数(*args)

    • 剩余的未命名的位置参数会被收集到args元组中。
  • 步骤三:处理关键字参数

    • 检查是否有未指定为位置的关键字参数。如果存在,则将这些关键字参数添加到kwargs字典中。

3. 示例应用

3.1 使用可变参数和关键字参数
python 复制代码
def greet(name, age, *args, city="北京", **kwargs):
    return f"欢迎!{name},你是{age}岁,并且来自{city}."
  • 调用方式:
    • greet("张三", 30) → 欢迎!张三,你是30岁。
    • greet("李四", 25, "上海") → 欢迎!李四,你是25岁,来自上海。
    • greet("王五", 28, "广州", province="山东") → 欢迎!王五,你是28岁,来自广州。
3.2 使用混合参数
python 复制代码
def calculate(a, b=0, *args, c=5, d=10, **kwargs):
    return f"a={a}, b={b}, args={args}, c={c}, d={d}, kwargs={kwargs}"
  • 调用方式:
    • calculate(10) → a=10, b=0, args=(), c=5, d=10, kwargs={}
    • calculate(15, 20, 30, 40, city="上海") → a=15, b=20, args=(30,40), c=5, d=10, kwargs={'city':'上海'}

4. 注意事项

  • 关键字参数必须明确声明,否则会导致语法错误。
  • *args**kwargs不能同时使用在同一个参数位置,除非明确分隔。
  • 参数传递顺序需遵守定义顺序,混用时需注意位置与关键字的匹配。

通过掌握这些知识,你可以灵活地构建函数参数结构,满足不同的需求。

相关推荐
yzx9910131 分钟前
小程序开发APP
开发语言·人工智能·python·yolo
飞翔的佩奇23 分钟前
【完整源码+数据集+部署教程】二维码与查找模式检测系统源码和数据集:改进yolo11-CSwinTransformer
python·yolo·计算机视觉·数据集·yolo11·二维码与查找模式检测
大霞上仙29 分钟前
实现自学习系统,输入excel文件,能学习后进行相应回答
python·学习·excel
啊阿狸不会拉杆38 分钟前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
Caven7738 分钟前
【pytorch】reshape的使用
pytorch·python
无规则ai40 分钟前
动手学深度学习(pytorch版):第四章节—多层感知机(5)权重衰减
人工智能·pytorch·python·深度学习
你知道网上冲浪吗2 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
钢铁男儿2 小时前
Python 正则表达式核心元字符全解析
python
yatingliu20192 小时前
HiveQL | 个人学习笔记
hive·笔记·sql·学习
武当豆豆2 小时前
C++编程学习(第25天)
开发语言·c++·学习