2020-06-26 13:56:54
在Python函数中,*和的核心内涵是作为参数传递的灵活工具,分别用于处理位置参数和关键字参数的动态收集与解包。
*(通常写作*args)的作用是收集多余的位置参数。在函数定义时,*args会将所有未被明确命名的位置参数打包成一个元组(tuple)。例如,函数def my_sum(*numbers):中,调用my_sum(1, 2, 3)时,numbers会接收元组(1, 2, 3)。这种机制允许函数接受不确定数量的参数,适用于求和、日志打印等场景。*args必须放在普通位置参数之后,否则会引发语法错误。此外,在函数调用时,*可用于解包可迭代对象(如列表、元组),将其元素作为独立参数传递。例如,my_list = [5, 6, 7]; my_sum(*my_list)等价于my_sum(5, 6, 7)。
(通常写作kwargs)的作用是收集多余的关键字参数。在函数定义时,kwargs会将所有未被明确命名的关键字参数打包成一个字典(dict),键为参数名,值为参数值。例如,函数def display_info(name, details):中,调用display_info("张三", age=25, city="北京")时,details会接收字典{'age': 25, 'city': '北京'}。这种机制适用于配置选项、框架接口等需要灵活处理关键字参数的场景。kwargs必须放在所有参数(包括*args)之后,否则会因参数顺序不明确而报错。在函数调用时,可用于解包字典,将其键值对作为独立关键字参数传递。例如,user_profile = {"age": 30}; display_info("李四", user_profile)等价于display_info("李四", age=30)。
*args和kwargs可组合使用,使函数同时支持任意数量的位置参数和关键字参数。例如,函数def powerful_function(a, *args, kwargs):可接收固定参数a、任意位置参数args和任意关键字参数kwargs。这种组合极大提升了代码的灵活性,常用于装饰器、适配器模式等需要动态传递参数的场景。
总结: