关于Python形参打包与解包小技巧分享

  • Post category:Python

关于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 中非常常用的技巧,能够优雅地处理函数参数的数量和类型。当你遇到无法确定函数参数数量和类型的情况时,尝试使用形参打包;当你需要将一个参数序列拆分成多个位置参数或关键字参数时,尝试使用形参解包。