目录 一、参数 基础类型 1. 位置参数 (Positional Arguments) 2. 默认参数 (Default Arguments) 3. 可变参数 3.1 可变位置参数 (`*args`) 3.2 可变关键字参数 (**kwargs) 二、高级参数 组合 1. 命名关键字参数 (Keyword-only Arguments) 2. 参数 组合顺序规则 三、参数 传递机制 四、常见问题与陷阱 1. 默认参数 陷阱 2. 参数 顺序错误 3. 命名冲突 五、最佳实践建议
一、参数 基础类型
1. 位置参数 (Positional Arguments)
定义 :函数 定义时按顺序声明的参数 ,调用时必须按相同顺序传递值 特点 : 参数 顺序决定传值逻辑调用时缺少参数 会触发TypeError
注意 :多参数 场景下需严格保持顺序,否则可能引发逻辑错误
2. 默认参数 (Default Arguments)
定义 :在参数 声明时赋予默认值,调用时可省略传参 特性 : 必须声明在位置参数 之后 默认值在函数 定义时初始化,应避免使用可变对象(如列表) 典型用法 :def func(a, b=5):
3. 可变参数
3.1 可变位置参数 (*args
)
功能 :接收任意数量位置参数 ,打包为元组 调用方式 :
python"> def sum_all ( * nums) : return sum ( nums) sum_all( 1 , 2 , 3 )
3.2 可变关键字参数 (**kwargs)
python">def print_info ( ** data) : for k, v in data. items( ) : print ( f" { k} : { v} " )
print_info( name= "Alice" , age= 25 )
二、高级参数 组合
1. 命名关键字参数 (Keyword-only Arguments)
定义 :通过*
分隔符强制要求以键值对形式传参语法 :
python">def register ( name, * , email, phone) : pass
register( "Bob" , email= "bob@test.com" , phone= 123456 )
2. 参数 组合顺序规则
位置参数 → 默认参数 → 可变位置参数 (*args) → 命名关键字参数 → 可变关键字参数 (**kwargs) 错误示例:def func(a=1, b)会导致语法错误(默认参数 在位置参数 前)
三、参数 传递机制
1. 参数 解包技巧
python">def sum_all ( * args) : print ( sum ( args) ) nums = [ 2 , 3 , 4 ]
sum_all( * nums)
python">class People : def __init__ ( self, name, age, ** kwargs) : self. name = nameself. age = ageself. info = kwargsdef __str__ ( self) : return f'Name: { self. name} , Age: { self. age} , Other Message: { self. info} ' data = { 'city' : 'GuangZhou' , 'job' : 'Engineer' }
yant = People( 'Yant' , 24 , ** data)
print ( yant)
2. 参数 作用域
函数 内部修改不可变类型参数 (如整数、字符串)不会影响外部变量修改可变类型参数 (如列表)会影响原始对象
四、常见问题与陷阱
1. 默认参数 陷阱
问题 :默认值在函数 定义时创建,多次调用共享同一对象,这个问题需要留意,新手开发者出现的概率非常高
python">def append_to ( element, target= [ ] ) : target. append( element) return target
print ( append_to( 1 ) )
print ( append_to( 2 ) )
python">def append_to ( element, target= None ) : target = target or [ ] target. append( element) return target
2. 参数 顺序错误
典型错误 :def func(a=1, b)
导致语法错误,这个错误pycharm会提示修正 :必选参数 需在默认参数 前声明def func(b, a=1)
3. 命名冲突
现象 :**kwargs
中的键名与函数 参数 名重复时引发逻辑错误规避 :确保键名不与已有参数 名冲突
python">def insert_dict ( name, age, ** kwargs) : person = { 'name' : name, 'age' : age, ** kwargs} return personresult = insert_dict( 'Yant' , 28 , name= 'Yant' , City= 'Guangzhou' )
print ( result)
Traceback ( most recent call last) :File "E:\PythonProject\python Study\drfStudy\.debug\main.py" , line 10 , in < module> result = insert_dict( 'Yant' , 28 , name = 'Yant' , City = 'Guangzhou' )
TypeError: insert_dict( ) got multiple values for argument 'name'
五、最佳实践建议
参数 设计原则 :
优先使用位置参数 保证基础功能 默认参数 简化高频使用场景 *args/**kwargs
增强灵活性
可读性优化 :
关键字参数 明确传参意图(如connect(timeout=10)
) 复杂参数 组合添加类型注解
调试技巧 :
使用 inspect
模块分析参数 签名 通过 locals()
打印函数 内部参数 状态
本文综合了Python参数 系统的核心机制与实战经验,完整参数 规范请参考 Python官方标准库文档