当前位置: 首页 > 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 的使用

  • 闭包的概念与应用场景

 

 

http://www.xdnf.cn/news/32473.html

相关文章:

  • 树莓派5-开发应用笔记
  • Java Web 之 Tomcat 100问
  • git合并分支并推送
  • 为什么浮点数会搞出Infinity和NAN两种类型?浮点数的底层原理?IEEE 754标准揭秘?
  • matlab 环形单层柱状图
  • 解锁异步JavaScript性能:从事件循环(Event Loop)到Promise与Async/Await的最佳实践
  • 电商平台计算订单成交额是不是要去除退款退货的
  • CMFA在自动驾驶中的应用案例
  • 多线程使用——线程安全、线程同步
  • 【Canvas与旗帜】标准英国米字旗
  • 实现批量图片文字识别(python+flask+EasyOCR)
  • 系统架构设计师:计算机组成与体系结构(如CPU、存储系统、I/O系统)案例分析与简答题、详细解析与评分要点
  • 【C++动态规划】2801. 统计范围内的步进数字数目|2367
  • 洛谷P1177【模板】排序:十种排序算法全解(2)
  • Docker安装与介绍(一)
  • 【工具变量】A股上市公司信息披露质量KV指数测算数据集(含do代码 1991-2024年)
  • 青少年编程与数学 02-016 Python数据结构与算法 29课题、自然语言处理算法
  • 黑马Java基础笔记-1
  • 计算机网络——常见的网络攻击手段
  • 面试题之如何设计一个秒杀系统?
  • 编程语言基础 - C++ 面试题
  • jenkins尾随命令
  • word选中所有的表格——宏
  • ETF价格相关性计算算法深度分析
  • Java Stream 复杂场景排序与分组技术解析与示例代码
  • 蓝桥杯 蜗牛 动态规划
  • 遨游科普:防爆平板是指什么?有哪些应用场景?
  • 使用vue2技术写了一个纯前端的静态网站商城-鲜花销售商城
  • javassist
  • Python concurrent.futures模块的ProcessPoolExecutor, ThreadPoolExecutor类介绍