Python 进阶
*args 和 **kwargs
掌握可变参数和关键字参数
- 理解 *args 收集位置参数
- 理解 **kwargs 收集关键字参数
- 掌握参数解包
*args 可变位置参数
就这么简单。不确定要传多少个参数时,用 *args 收集成元组。
示例代码(可运行)
Python 0%
**kwargs 可变关键字参数
示例代码(可运行)
Python 0%
参数解包
示例代码(可运行)
Python 0%
ℹ️参数顺序
参数顺序必须是:普通参数 → *args → 默认参数 → **kwargs。
预测输出
def f(*args):
return len(args)
print(f(1,2,3,4))找 Bugf需要2个位置参数a和b,但只传了1个。
def f(a, b, **kwargs):
pass
f(1, x=2, y=3)
填空题填写空白处的代码
def f(args):
print(sum(args))
f(1,2,3) # 6
选择题
**kwargs 收集的参数类型是?
选择题
def f(x, items=[]) 这种可变默认参数为什么是经典陷阱?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
list 底层是一段连续的指针数组,容量不够时整体扩容(CPython 约按 1.125 倍)。因此按下标取元素是 O(1),末尾 append 均摊 O(1),但在头部 insert(0,…) 或 pop(0) 要搬动全部元素、是 O(n)。dict/set 基于哈希表,平均查找 O(1) 但更耗内存。选对数据结构,往往比抠语法更影响性能。
挑战任务
可变参数挑战
简单+50 XP
写一个函数计算任意个数字的平均值。
可变参数挑战
Python 0%
2 个测试用例
课后作业
万能打印
中等+20 XP
写函数接受任意参数并格式化打印。
万能打印
Python 0%
1 个测试用例