python|Python进阶系列 - 18讲 伟大的*号

星号 (*) 可用于 Python 中的不同情况:

  • 乘法和幂运算
  • 创建具有重复元素的列表、元组或字符串
  • *args**kwargs 和关键字参数
  • 为函数参数解包列表/元组/字典
  • 拆包容器
  • 将容器合并到列表/合并字典
乘法和幂运算 代码:
print(7 * 5) print(2**4)

结果:
35 16

创建具有重复元素的列表、元组或字符串 代码:
# 列表 zeros = [0] * 10 onetwos = [1, 2] * 5 print(zeros) print(onetwos) # 元组 zeros = (0,) * 10 onetwos = (1, 2) * 5 print(zeros) print(onetwos) # 字符串 A_string = "A" * 10 AB_string = "AB" * 5 print(A_string) print(AB_string)

结果:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 2, 1, 2, 1, 2, 1, 2, 1, 2] (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) (1, 2, 1, 2, 1, 2, 1, 2, 1, 2) AAAAAAAAAA ABABABABAB

*args , **kwargs 和关键字参数
  • *args 用于可变长度参数
  • **kwargs 用于可变长度的关键字参数
  • 使用 * 后跟更多函数参数来强制仅使用关键字参数
代码:
#可变参数 def my_function(*args, **kwargs): for arg in args: print(arg) for key in kwargs: print(key, kwargs[key]) my_function("Hey", 3, [0, 1, 2], name="Alex", age=8)#强制关键词参数 def my_function2(name, *, age): print(name) print(age) my_function2("Michael", age=5)

结果:
Hey 3 [0, 1, 2] name Alex age 8 Michael 5

参数解包
  • 如果长度与参数匹配,则列表/元组/集合/字符串可以使用一个 * 解压缩为函数参数。
  • 如果长度和键与参数匹配,字典可以用两个 ** 解包。
代码:
def foo(a, b, c): print(a, b, c) my_list = [1, 2, 3] foo(*my_list) # *list传参 my_string = "ABC" foo(*my_string) my_dict = {'a': 4, 'b': 5, 'c': 6} foo(**my_dict) # **dict传参

结果:
1 2 3 A B C 4 5 6

拆分容器 将列表、元组或集合的元素解包为单个和多个剩余元素。
代码:
numbers = (1, 2, 3, 4, 5, 6, 7, 8) print("*在开始:") *beginning, last = numbers print(beginning, last) print("*在末尾:") first, *end = numbers print(first, end) print("*在中间位置:") first, *middle, last = numbers print(first, middle, last)

【python|Python进阶系列 - 18讲 伟大的*号】结果:
*在开始: [1, 2, 3, 4, 5, 6, 7] 8 *在末尾: 1 [2, 3, 4, 5, 6, 7, 8] *在中间位置: 1 [2, 3, 4, 5, 6, 7] 8

将迭代元素合并到列表/字典 代码:
# 合并列表 my_tuple = (1, 2, 3) my_set = {4, 5, 6} my_list = [*my_tuple, *my_set] print(my_list) # 合并字典 dict_a = {"one": 1, "two": 2} dict_b = {"three": 3, "four": 4} dict_c = {**dict_a, **dict_b} print(dict_c)

结果:
[1, 2, 3, 4, 5, 6] {'one': 1, 'two': 2, 'three': 3, 'four': 4}

    推荐阅读