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不能同时使用在同一个参数位置,除非明确分隔。
  • 参数传递顺序需遵守定义顺序,混用时需注意位置与关键字的匹配。

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

相关推荐
JWASX2 分钟前
Java 转 go 学习 - 接口
学习·golang
外收内放9 分钟前
Python基础语法练习题(拓展2)
python·pygame
I Am a robert girl13 分钟前
从零读懂世界模型的持续学习:一份组合式基准的源码级拆解
学习·具身智能·持续学习·灾难性遗忘·机器人学习·世界模型·组合式基准
“AI国潮设计-小江”14 分钟前
《Python+SDXL实战:用ControlNet批量生成“英歌舞草莓蛋糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
扶风ff17 分钟前
练题簿在线免费刷题:刷题、背题、错题复习,一个小程序安排日常备考
学习·小程序
为啥全要学18 分钟前
大模型流式输出过滤敏感词
开发语言·python
小溪学编程19 分钟前
C语言篇:语言结构
c语言·开发语言·算法
東隅已逝,桑榆非晚20 分钟前
数据结构队列
数据结构·笔记·学习
老王爱玩车20 分钟前
字符串和字符串函数
c语言·开发语言·数据结构·学习
扶风ff23 分钟前
练题簿在线免费刷题:共享题库、学习任务、在线考试,岗位培训更方便
学习·小程序