Python *args和**kwargs

geteshi
2022-05-09 / 0 评论 / 14 阅读 / 正在检测是否收录...

我们知道splat运算符解包多个值,并且知道函数参数有两种类型。若现在还未弄明白,那么可以将*args理解为变元的缩写,而**kwargs理解为关键字变元的缩写。

各参数用于解压其各自的变元类型,允许使用可变字长变元列表进行函数调用。例如,创建一个函数表示学生的考试分数。

def printScores(student,*scores):
  print(f"Student Name:{student}")
  for score in scores:
    print(score)
printScores("Jonathan",100, 95, 88, 92, 99)

"""
Student Name: Jonathan
100
95
88
92
99
"""

噢,等等,我并未称呼其为*args?是的,“args”是一个标准化规范,但仍然只是一个名称。事实上,在*args中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数(在这些定义变元后)。

这些理清楚之后,**kwargs就很容易理解了。名称并不重要,重要的是双星号创建了字典,其内容是关键字参数,来自函数调用(在这些定义变元后)。

为了更好地演示,我们创建一个函数,输出参加全国英语等级考试的人员名单。

def printPetNames(owner,**pets):
  print(f"Owner Name:{owner}")
  for pet,name in pets.items():
    print(f"{pet}:{name}")
printPetNames("Jonathan", dog="Brock",fish=["Larry", "Curly", "Moe"],turtle="Shelldon")
"""
Owner Name: Jonathan
dog: Brock
fish: ['Larry', 'Curly', 'Moe']
turtle: Shelldon
"""
0

评论 (0)

取消