当前位置: 首页 > news >正文

Python语法系列博客 · 第9期[特殊字符] 函数参数进阶:*args、**kwargs 与参数解包技巧

上一期小练习解答(第8期回顾)

✅ 练习1:整数转字符串列表
nums = [1, 2, 3, 4, 5]
str_list = list(map(str, nums))

✅ 练习2:筛选回文字符串

words = ["madam", "hello", "noon", "python"]
palindromes = list(filter(lambda x: x == x[::-1], words))

 ✅ 练习3:使用 reduce 计算乘积

from functools import reduce
product = reduce(lambda x, y: x * y, [2, 3, 4])  # 24

✅ 练习4:lambda 表达式计算 x² + 2x + 1

quad = lambda x: x**2 + 2*x + 1
result = quad(3)  # 16

本期主题:函数参数进阶


🟦 9.1 位置参数、关键字参数复习

def greet(name, message="Hello"):print(f"{message}, {name}!")greet("Alice")                # Hello, Alice!
greet("Bob", message="Hi")   # Hi, Bob!

9.2 不定长参数:*args**kwargs

*args:接收任意个数的位置参数,形式为元组。

def add_all(*args):return sum(args)print(add_all(1, 2, 3))  # 6

 ✅ **kwargs:接收任意个数的关键字参数,形式为字典。

def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="Alice", age=30)

 9.3 混合使用:参数顺序规则

def func(a, b=2, *args, **kwargs):print(a, b, args, kwargs)func(1, 3, 4, 5, x=10, y=20)
# 输出:1 3 (4, 5) {'x': 10, 'y': 20}

✅ 推荐顺序:位置参数 → 默认参数 → *args → **kwargs

9.4 参数解包技巧

🔹 列表或元组解包
def multiply(x, y):return x * yargs = (3, 4)
print(multiply(*args))  # 12

🔹 字典解包

def introduce(name, age):print(f"My name is {name}, I'm {age} years old.")info = {"name": "Tom", "age": 25}
introduce(**info)

 

9.5 实用案例

📌 自动打印任意函数的参数内容(日志用途)
def debug_args(*args, **kwargs):print("位置参数:", args)print("关键字参数:", kwargs)debug_args(1, 2, name="Alice", age=30)

📌 合并多个字典

d1 = {"a": 1}
d2 = {"b": 2}
d3 = {**d1, **d2}
print(d3)  # {'a': 1, 'b': 2}

本期小练习

  1. 编写一个函数 average(*args),计算传入任意多个数的平均值。

  2. 编写一个函数 build_profile(**kwargs),将所有键值对整理为一个字符串表示。

  3. 给定函数 def f(a, b, c):,尝试使用元组和字典进行解包调用。

  4. 尝试使用 *args 实现不定长的字符串拼接函数。

本期小结

  • 掌握了函数的高级参数使用方式:*args**kwargs

  • 学会了使用参数解包(*)技巧。

  • 能够组合参数来构建更灵活的函数接口。

第10期预告:

下一期将探索:

  • Python中的作用域与变量查找(LEGB原则)

  • 局部变量、全局变量与 global / nonlocal 的使用

  • 闭包的概念与应用场景

 

 

相关文章:

  • 混合精度训练中的算力浪费分析:FP16/FP8/BF16的隐藏成本
  • 深度学习--mnist数据集实现卷积神经网络的手写数字识别
  • 探索大语言模型(LLM):Transformer 与 BERT从原理到实践
  • 【OpenGL】OpenGL学习笔记-1:VS2019配置OpenGL开发环境
  • PR第一课
  • Arduino项目中硬件包括哪些部分
  • 【MATLAB海洋专题】历史汇总
  • 链表面试题
  • 用思维导图解锁计算机科学导论的知识宝库
  • 取值运算符*和地址运算符
  • MYSQL初阶(暂为自用草稿)
  • [密码学基础]GM/T 0018-2023 密码设备应用接口规范深度解析:技术革新与开发者实践
  • 【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)
  • 使用C语言的cJSON中给JSON字符串添加转义
  • C++中chrono计时器的简单使用示例
  • MCP协议驱动的全自动光催化甲烷偶联实验平台构建及实现方案
  • 【论文推荐|深度学习,冰川测绘,遥感,青藏高原】SAU-Net: 基于多源遥感数据的冰川制图深度学习方法(二)
  • 每日定投40刀BTC(14)20250409 - 20250419
  • windows11安装jitsi-meet视频会议系统
  • 如何使用flatten函数在Terraform 中迭代嵌套map
  • 澳门世界杯“中日对决”,蒯曼击败伊藤美诚晋级女单决赛
  • 山东临沂市市长张宝亮履新市委书记
  • 6万余采购商消博会上“扫货”,全球好物“购物车”满载而归
  • 上海一季度人民币贷款增4151亿,住户存款增3134亿
  • 关注“老旧小区加装电梯”等安全隐患,最高检发布相关典型案例
  • 煤矿疑污水渗漏致数十亩耕地被淹,陕西榆阳区:成立调查组调查