Python解包

20

*arg参数

*args 用于传递任意数量的位置参数。* 表示将所有传入的非关键字参数(位置参数)收集为一个元组。

 def my_function(*args):
     for arg in args:
         print(arg)

几个简单的例子传递多个值,加在一起

求和函数

 def add_all(*args):
     return sum(args)
 ​
 res = add_all(1, 2, 3, 4, 5)
 print(res)
 #15

计算平均数

 def calculate_average(*grades):
     if grades:
         return sum(grades) / len(grades)
     else:
         return 0
 ​
 print(calculate_average(80, 90, 70))      # 输出:80.0
 print(calculate_average(100, 95, 85, 90)) # 输出:92.5

拼接字符串

 def concatenate(*args):
     return " ".join(args)
 ​
 print(concatenate("Hello", "world", "!"))       # 输出:Hello world !
 print(concatenate("Python", "is", "fun"))       # 输出:Python is fun

四则运算

这个稍微复杂一点

 #实现四则运算
 def operations(op, *args):
     if op == '+':
         return sum(args)
     if op == '-':
         return args[0] - sum(args[1:])
     if op == '*':
         result = 1
         for i in args:
             result *= i
         return result
     if op == '/':
         result = args[0]
         for i in args[1:]:
             result /= i
         return result
     return None
 ​
 print(operations('+', 1, 2, 3, 4, 5))  # 15
 print(operations('-', 1, 2, 3, 4, 5))  # -13
 print(operations('*', 1, 2, 3, 4, 5))  # 120
 print(operations('/', 1, 2, 3, 4, 5))  # 0.008333333333333333

这个主要加了一个额外的说明参数

**kwargs可变关键字参数

**kwargs 用于接收任意数量的关键字参数,并将它们存储在一个字典中。** 将所有关键字参数收集为一个字典

基本语法:

 def my_function(**kwargs):
     for key, value in kwargs.items():
         print(f"{key} = {value}")

一个例子

 def introduce(**kwargs):
     for key, value in kwargs.items():
         print(f"{key}: {value}")
 ​
 introduce(name="Alice", age=25, city="New York")
 # 输出:
 # name: Alice
 # age: 25
 # city: New York

解包

解包(Unpacking),将一个可迭代对象(例如列表、元组或字典)中的元素分解为单独的值,然后传递给函数或者赋值给变量

通常使用 ***实现

下面这个例子使用 *解包元组和列表

 def add(x,y,z):
     return x+y+z
 ​
 # 解包元组
 nums = (4,6,9)
 print(add(*nums))  # 19
 ​
 # 解包列表
 nums = [4,6,9]
 print(add(*nums))  # 19
 ​
 # 解包字典
 nums = {"x":4, "y":6, "z":9}
 print(add(**nums))  # 19

下面使用 **,解包字典

 # **
 def great(name,age,phone):
     print(f"姓名:{name},年龄:{age},电话:{phone}")
 ​
 dx33661 = {"name":"dx33661","age":18,"phone":"123456789"}
 great(**dx33661)  # 姓名:dx33661,年龄:18,电话:123456789

解包赋值

顾名思义---->

**解包还可以用于变量赋值。通过 ***,可以将列表或元组中的部分元素解包为多个变量。

 a, b, c, d = (1, 2, 3, 4)
 print(a, b, c, d)  # 1 2 3 4
 ​
 # 例子
 nums1 , *nums2 , nums3 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
 print(nums1)
 print(nums2)
 print(nums3)
 ​

合并

主要是应用的例子

 # 用于合并两个列表
 list1 = [1, 2, 3]
 list2 = [4, 5, 6]
 list3 = [*list1, *list2]
 print(list3)  # [1, 2, 3, 4, 5, 6]
 ​
 """
 list4 = list1 + list2
 print(list4)  # [1, 2, 3, 4, 5, 6]
 """
 ​
 # 用于合并两个字典
 dict1 = {'a': 1, 'b': 2}
 dict2 = {'c': 3, 'd': 4}
 dict3 = {**dict1, **dict2}
 print(dict3)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

利用解包可以比较方便的合并多个列表或者字典