微信手机网站三合一,画册设计免费模板,访问网站错误代码为137,保定企业自助建站系统背景
在学习python时发现方法调用和方法定义会经常发现有带星号的标记#xff0c;为了弄明白是怎么使用的。特此做个笔记。
一、参数符号对比速查表
符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)*函数定义收集多余位置参数为元组…背景
在学习python时发现方法调用和方法定义会经常发现有带星号的标记为了弄明白是怎么使用的。特此做个笔记。
一、参数符号对比速查表
符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)*函数定义收集多余位置参数为元组.def func(*args)*函数调用解包可迭代对象为位置参数.func(*[1,2])**函数定义收集多余关键字参数为字典def func(**kwargs)**函数调用解包字典为关键字参数func(**{‘x’:1})单独*参数分隔强制后续参数必须用关键字指定def func(a, *, b)
二、核心区别详解
1. 无符号参数基础参数
# 位置参数示例
def add(a, b):return a badd(3, 5) # ✅ 正确位置传参
add(b5, a3) # ✅ 正确关键字传参
2. 单星号(*)参数
定义时使用收集位置参数
def log(*values):print(type(values)) # class tupleprint(values)log(1, A, True) # 输出: (1, A, True)
调用时使用解包可迭代对象
def plot(x, y):print(f绘制点({x},{y}))points [5, 8]
plot(*points) # 等效于 plot(5, 8)
3. 双星号(**)参数
定义时使用收集关键字参数
def user_info(**details):print(type(details)) # class dictprint(details)user_info(nameAlice, age25) # 输出: {name: Alice, age: 25}
调用时使用解包字典
def create_profile(name, age):print(f{name} | {age}岁)data {name: Bob, age: 30}
create_profile(**data) # 等效于 create_profile(nameBob, age30)
4. 强制关键字参数单独*
def register(username, *, email, phone):print(f注册用户: {username}, 邮箱: {email}, 电话: {phone})register(wyz, emailwyzexample.com, phone13800138000) # ✅ 正确
register(bob456, bobtest.com, 12345678911) # ❌ 报错email和phone必须用关键字参数三、混合使用案例
def complex_example(a, b0, *args, c, d10, **kwargs):print(f固定参数: a{a}, b{b}可变位置参数: args{args}强制关键字参数: c{c}, d{d}可变关键字参数: kwargs{kwargs})complex_example(1, 2, 3, 4, c5, e20, f30)
# 输出:
# 固定参数: a1, b2
# 可变位置参数: args(3, 4)
# 强制关键字参数: c5, d10
# 可变关键字参数: kwargs{e: 20, f: 30}