写python时,你可能经常会看到 *args、**kwargs 以及 first, *rest 这一类带有星号的写法,但是对于它们究竟是在进行打包操作,还是在开展解包处理,往往一直没有形成相对清晰的理解。
虽然这些语法表面上都会使用到星号,但是当星号分别出现在赋值语句、函数定义以及函数调用等不同位置时,它所发挥的具体作用其实并不完全相同。如果只是简单记住相关写法,却没有理解它们所处的位置以及数据流动的方向,那么在真正阅读代码或者编写函数的时候,就很容易把打包和解包这两个过程混淆在一起。
本篇文章将从相对基础的赋值操作开始讲起,再逐步延伸到函数参数定义以及函数调用等相关场景,把单星号和双星号在不同位置所对应的作用串联起来,帮助你一次性理顺这些在 Python 当中出现频率相对较高的语法内容。
Python 解包的核心并不复杂:左侧看结构,右侧看数量;定义函数时多半是在收集参数,调用函数时多半是在展开数据。掌握赋值解包、星号解包、循环解包和字典展开后,很多重复代码都能写得更简洁。建议结合示例亲自运行一遍,理解会更牢。