pubanswer

为什么Python列表前面会加星号(*)?

michael2024-04-30

当你在Python中看到一个列表前面加了星号(*),这其实是一个非常酷的特性,叫做 unpacking。这个技巧不仅可以让你的代码更加简洁,还能提高可读性。让我们一起来看看它是如何工作的,以及你可以如何在你的代码中使用它。

什么是 Unpacking?

简单来说,unpacking 允许你把一个可迭代对象(比如列表或者元组)中的元素“解包”出来,并且直接传给函数作为参数,或者在赋值操作中使用。这就是为什么你会看到有些列表前面会加一个星号。

使用场景

函数参数

假设你有一个函数和一个列表:

def greet(first_name, last_name):
    print(f"Hello, {first_name} {last_name}!")

和一个包含两个元素的列表:

name = ["John", "Doe"]

你可以通过在列表前加星号来直接传递列表的内容作为参数:

greet(*name)

这样,first_name会被赋值为"John"last_name会被赋值为"Doe"

合并列表

当你想要合并两个或更多的列表时,也可以使用星号:

list_one = [1, 2, 3]
list_two = [4, 5, 6]
merged_list = [*list_one, *list_two]
print(merged_list)

输出将会是:

[1, 2, 3, 4, 5, 6]

解包字典

虽然我们主要讨论的是列表,但是值得一提的是,你也可以使用两个星号(**)来解包字典:

info = {"name": "John", "age": 30}
print("Hello, I am {name} and I am {age} years old.".format(**info))

注意事项

  • 记得列表或元组的长度要和函数参数的数量匹配,否则你会得到一个TypeError
  • 解包操作不仅仅限于列表,任何可迭代对象都可以使用这个技巧。

使用星号解包特性可以让你的代码更加清晰、简洁,特别是在处理列表和函数参数时。希望这对你有帮助。