19. 星号操作符 — Python 进阶
星号( *
)可用于Python中的不同情况:
- 乘法和幂运算
- 创建具有重复元素的列表,元组或字符串
*args
,**kwargs
和仅关键字参数- 拆包列表/元组/字典的函数参数
- 拆包容器
- 将可迭代对象合并到列表中/合并字典
乘法和幂运算
# 乘法 |
35 |
创建具有重复元素的列表,元组或字符串
# list |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] |
*args
, **kwargs
和仅关键字参数
- 对可变长度参数使用
*args
- 对长度可变的关键字参数使用
**kwargs
- 使用
*
,后跟更多函数参数以强制使用仅关键字的参数
def my_function(*args, **kwargs): |
Hey |
拆包函数参数
- 如果长度与参数匹配,则列表/元组/集合/字符串可以用
*
拆成函数参数。 - 如果长度和键与参数匹配,则字典可以用两个
**
拆包。
def foo(a, b, c): |
1 2 3 |
拆包容器
将列表,元组或集合的元素拆包为单个和多个剩余元素。 请注意,即使被拆包的容器是元组或集合,也将多个元素组合在一个列表中。
numbers = (1, 2, 3, 4, 5, 6, 7, 8) |
[1, 2, 3, 4, 5, 6, 7] |
将可迭代对象合并到列表中/合并字典
由于PEP 448(https://www.python.org/dev/peps/pep-0448/),从Python 3.5开始,这是可能的。
# 将可迭代对象合并到列表中 |
[1, 2, 3, 4, 5, 6] |
但是,请注意以下合并解决方案。 如果字典中有任何非字符串键,则它将不起作用:https://stackoverflow.com/questions/38987/how-to-merge-two-dictionaries-in-a-single-expression/39858#39858
dict_a = {'one': 1, 'two': 2} |
--------------------------------------------------------------------------- |
推荐进一步阅读:
- https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them/
- https://treyhunner.com/2016/02/how-to-merge-dictionaries-in-python/
GitHub repo: qiwihui/blog
Follow me: @qiwihui
Site: QIWIHUI