关于Python形参打包与解包小技巧分享
什么是形参打包与解包
函数调用时,会将实际参数打包为元组或字典,传递给形参。而在函数定义时,可以使用形参打包来处理未知数量和类型的实参。而形参解包则是对打包的反向操作。
形参打包
当无法确定传递给函数的实参数量时,可以使用形参打包,将多个实参打包为一个元组或字典,以便在函数中进行处理。
元组打包
在函数定义时,可以使用 *args 表示打包未知数量的实参。
def average(*args):
return sum(args) / len(args)
result = average(3, 4, 5)
print(result) # 4.0
在调用 average 函数时,传递了三个整数,函数中的 *args 形参将它们打包为一个元组 (3, 4, 5)。然后对这个元组进行求和和平均操作,返回结果 4.0。
字典打包
除了使用元组打包,还可以使用 **kwargs 表示打包未知数量和名称的实参。
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Tom", age=20, gender="male")
在调用 print_info 函数时,传递了三个键值对,函数中的 **kwargs 形参将它们打包为一个字典 {“name”:”Tom”, “age”:20, “gender”:”male”}。然后对这个字典进行遍历操作,打印出每个键值对的内容。
形参解包
当已定义的形参为元组或字典时,可以使用形参解包,将一个元组或字典拆分成多个位置参数或关键字参数。
元组解包
在函数调用时,可以使用 * 运算符解包元组,将一个元组的元素作为多个位置参数传递给函数。
def multiply(x, y):
return x * y
t = (3, 4)
result = multiply(*t)
print(result) # 12
在调用 multiply 函数时,使用 *t 将元组 (3, 4) 解包为两个位置参数 3 和 4,然后将它们传递给函数。函数对这两个参数进行乘法操作,返回结果 12。
字典解包
在函数调用时,可以使用 ** 运算符解包字典,将一个字典的键值对作为关键字参数传递给函数。
def print_person_info(name, age):
print(f"My name is {name}, and I'm {age} years old.")
d = {"name":"Tom", "age":20}
print_person_info(**d)
在调用 print_person_info 函数时,使用 **d 将字典 {“name”:”Tom”, “age”:20} 解包为两个关键字参数 name=”Tom” 和 age=20,然后将它们传递给函数。函数用这两个参数打印出个人信息。输出结果为:
My name is Tom, and I'm 20 years old.
总结
形参打包与解包是 Python 中非常常用的技巧,能够优雅地处理函数参数的数量和类型。当你遇到无法确定函数参数数量和类型的情况时,尝试使用形参打包;当你需要将一个参数序列拆分成多个位置参数或关键字参数时,尝试使用形参解包。