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)
结果:
*在开始: [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}
下一篇:
java虚拟机底层内存所划分的几个区域